如何使用OpenStackSDK获取项目配额限制及解决返回空值问题
问题根因
你当前代码直接实例化了openstack.compute.v2.limits.AbsoluteLimits数据模型类,该类仅用于结构化存储API返回的配额数据,本身不会发起API请求拉取实际配额,因此所有字段默认都是None值。
正确代码示例
1. 获取当前认证项目的计算配额
import openstack # 初始化OpenStack连接 auth_url_domain = "https://10.6.X.X:13000/v3" conn = openstack.connect( auth_url=auth_url_domain, project_name="admin", username="admin", domain_name="default", password="XXXXXX", cacert="/root/app/cacrt/cacrt/ca.crt10.6.X.X.pem" ) # 发起API请求拉取配额数据 limits = conn.compute.get_limits() # 提取绝对配额字段转为字典输出 absolute_limits = limits.absolute.to_dict() print(absolute_limits)
2. Admin权限获取所有项目的计算配额
import openstack # 初始化OpenStack连接 auth_url_domain = "https://10.6.X.X:13000/v3" conn = openstack.connect( auth_url=auth_url_domain, project_name="admin", username="admin", domain_name="default", password="XXXXXX", cacert="/root/app/cacrt/cacrt/ca.crt10.6.X.X.pem" ) all_project_quota = [] # 遍历所有项目 for project in conn.identity.projects(): # 查询指定项目的配额,仅Admin权限可查询其他项目数据 project_limits = conn.compute.get_limits(project_id=project.id) project_quota = { "project_id": project.id, "project_name": project.name, "quota": project_limits.absolute.to_dict() } all_project_quota.append(project_quota) print(f"项目{project.name}配额:", project_quota)
补充说明
- 若需获取网络、块存储等其他服务的配额,可分别调用
conn.network.get_quota_default(project_id=xxx)、conn.block_storage.get_quota_set(project_id=xxx)方法。 - 跨项目查询配额需要账号拥有Admin权限。
内容的提问来源于stack exchange,提问作者KASHIF IQBAL
相关产品推荐
相关产品推荐

