python - Django Ceilometer 获取所有项目的事件

标签 python django openstack ceilometer

我在获取 Ceilometer 中所有租户/项目的所有事件时遇到问题。 当我获取事件列表时,我总是只获取与用户分配的项目相关的事件列表。 openstack中的用户是admin。

更详细地解释:

这是我的示例代码:

def sync_resources():
    logger.info("Executing sync_resources")
    sync_tenants()
    tenants = Tenant.objects.all()
    managers = Manager.objects.filter(is_active=True)
    for manager in managers:
       services = manager.services.all()
       regions = manager.region_set.all()
       for region in regions:
           ceilometer_driver = CeilometerDriver(region_name=region.name, **manager.ceilometer_params)
           if ceilometer_driver.is_authenticated:
               for tenant in tenants:
                   queries = [ceilometer_driver.make_query("project_id", ceilometer_driver.EQUAL, tenant.tenant_id)]
                   resource_list = ceilometer_driver.get_event_list(query=queries)

示例函数使用我编写的驱动程序。驱动程序首先使用用户名、密码和项目 ID 进行身份验证。之后,它应该获取基于项目的事件列表。这里的问题是,即使用户是管理员,我也只能获取管理员被分配为用户的事件。

例如,当我尝试获取资源列表时,我没有获取所有事件,而是获取了所有事件。但是,当我尝试事件时,我只获得用户的项目事件。

# returns all the resources for all tenants/projects
resource_list = ceilometer_driver.get_resource_list()

# returns only the events for user projects
resource_list = ceilometer_driver.get_event_list()

当我尝试使用 REST API 时:

这将再次获取所有项目的所有资源: http://192.168.101.11:8777/v2/resources

此仅获取与用户相关的项目事件 http://192.168.101.11:8777/v2/events

如果管理员用户未分配给项目,则此返回空: http://192.168.101.11:8777/v2/events?q.field=project_id&q.value=d81584b38e56444cad4823b2bd2aab34

从终端:

这将再次获取所有项目的所有资源:

$ ceilometer resource-list

此仅获取与用户相关的项目事件

$ ceilometer event-list    

摘要:

我在代码、REST API 和终端中尝试过,所有结果都是相同的。作为管理员用户,当我选择资源时,我会得到所有资源;但是对于事件,我只获得与我的项目相关的事件。

我需要一种方法来获取所有项目的所有事件。我也不明白为什么要对事件有这样的控制!?

最佳答案

您需要使用 all_tenants eq True 进行过滤查询,如 API docs 底部所述。 .

2) Specify the ‘all_tenants=True’ query parameter to get all events for all projects, this is only allowed by admin users.

请注意,这是 Queens 和 Pike 中可用的 Panko/Ceilomter API 的最新添加内容(尽管它也已向后移植到 Ocata)。此查询仅适用于使用管理员 token 的管理员用户。

我无法谈论 python 客户端库以及它们是否公开它,但您可以直接从 API 成功查询它。我可以确认这是有效的,在 meshcloud,我们在生产中使用这个 API ;-)

关于python - Django Ceilometer 获取所有项目的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49319900/

相关文章:

python - psycopg2 转义字符

python - 如何更改 Django 中 MinValueValidator 错误消息中的日期格式?

python - 代码在 python 脚本中生成列表中所有项目的输出

python - Paypal 交易 : How to receive and send funds with PayPal API and Django?

Openstack 和 devstack

python - 无意的无限循环

python - Django在模板之外人性化?

python - Django 的模型保存流程

awk - 如何从 Openstack nova 列表中仅获取 ID 名称和网络字段

Terraform - 创建 OpenStack 负载均衡器 : Resource not found 时出错