Python中有限的OpenStack Identity API v3客户机(依赖性更少)

keystone-light的Python项目详细描述


keystone light为 OpenStack Identity API v3。在

初始目标:访问OpenStack Swift,使用Identity API v3,但是 依赖性更少。

在撰写本文时,python-keystoneclient需要 keystoneauth1oslo.*,这反过来又需要更多。我们 只需要universativerequests(和PyYAML),您可以 一般已经安装了。在

示例用法

#!/usr/bin/env python3fromurllib.parseimporturljoinimportrequestsfromkeystone_lightimportCloud,CloudConfig,PermissionDenieddefget_projects(cloud):"Yields projects, sorted by domain and project name"domains=cloud.get_domains()fordomaininsorted(domains,key=(lambdax:x.name)):ifdomain.name=='Default':# print('WARN: skipping domain Default (fixme?)')continueprojects=domain.get_projects()forprojectinsorted(projects,key=(lambdax:x.name)):project.domain=domainyieldprojectdefget_swift_stat_ensuring_permissions(project):"Get Swift v1 stat on a project (previously: tenant)"try:stat=project.get_swift().get_stat()exceptPermissionDenied:# We don't have permission to access the project? Upgrade the# permissions and try again.cloud=project.cloudadmin_role=cloud.get_role(name='admin')# or 'reader'dom_admin_group=project.domain.get_admin_group()url=urljoin(cloud.base_url,('/v3/projects/{project_id}/groups/{group_id}/''roles/{role_id}').format(project_id=project.id,group_id=dom_admin_group.id,role_id=admin_role.id))out=requests.put(url,headers={'X-Auth-Token':str(cloud.get_system_token())})assertout.status_codein(201,204),(out.status_code,out.text)# Try again. Should succeed if the cloud admin user is in the# dom_admin_group.stat=project.get_swift().get_stat()returnstat# Take config from ~/.config/openstack/clouds.yaml and select# 'my-cloud-admin', like the openstack(1) --os-cloud option.config=CloudConfig('my-cloud-admin')cloud=Cloud(config)forprojectinget_projects(cloud):swift_stat=get_swift_stat_ensuring_permissions(project)print('{:15s}{:23s}{:21d} B ({} objects, {} containers)'.format(project.domain.name[0:15],project.name,int(swift_stat['X-Account-Bytes-Used']),swift_stat['X-Account-Object-Count'],swift_stat['X-Account-Container-Count']))

输出示例

^{pr2}$

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用“Wed,01 Jul 2015 17:32:41 EDT”解析字符串   java Storm apache升级(1.0.0到2.0.0)   java类驻留在不同的目录中,而不是包指定的目录。为什么?   将Java中的图像缩放到非常小的维度   java如何通过子文档从自定义方面访问ElasticSearch parentdoc字段   java如何在RationalSoftwareArchitect中使用findbugs?   Java中的事件提升处理   java值被添加到arrayList的所有索引中,而不是在“”时添加到最后一个索引中。正在使用arraylist的add()方法   JFrame中的java JPanel派生类   java如何用循环和异步方法模拟类   java Android阻止可绘制背景超出视图范围   为客户排序Java阵列   java Apache poi如何将工作表设置为枚举位置值属性?   java Rhino在使用自定义类参数调用javascript函数时出错   java格式化日期从年月日到年月日   spring如何修复java。lang.illegalargumentexception在此特定场景中是否尝试创建具有null实体的合并事件?   java如何创建更好的对象