Django Ceilometer 获取所有项目的事件
Django Ceilometer get events for all projects
我在 Ceilometer 中获取所有 tenants/projects 的所有事件时遇到问题。
当我获得事件列表时,我总是只获得与我的用户分配的项目相关的事件列表。用户在 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)
示例函数使用了我编写的驱动程序。驱动程序首先使用用户名、密码和 project_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
如果管理员用户未分配给项目,则此 returns 为空:
http://192.168.101.11:8777/v2/events?q.field=project_id&q.value=d81584b38e56444cad4823b2bd2aab34
来自终端:
这将再次获取所有项目的所有资源:
$ ceilometer resource-list
这个只获取与用户相关的项目事件
$ ceilometer event-list
总结:
我在代码、REST API 和终端中尝试过,所有结果都是一样的。作为管理员用户,当我 select 资源时,我得到了所有;但是对于事件,我只得到与我的项目相关的事件。
我需要一种方法来获取所有项目的所有事件。我也不明白为什么要对事件进行这样的控制!?
您需要使用 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)。此查询仅适用于使用管理员令牌的管理员用户。
我不能代表 python 客户端库以及它们是否公开它,但您可以直接从 API 成功查询它。我可以确认这是有效的,在 meshcloud 我们在生产中使用这个 API ;-)
我在 Ceilometer 中获取所有 tenants/projects 的所有事件时遇到问题。 当我获得事件列表时,我总是只获得与我的用户分配的项目相关的事件列表。用户在 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)
示例函数使用了我编写的驱动程序。驱动程序首先使用用户名、密码和 project_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
如果管理员用户未分配给项目,则此 returns 为空: http://192.168.101.11:8777/v2/events?q.field=project_id&q.value=d81584b38e56444cad4823b2bd2aab34
来自终端:
这将再次获取所有项目的所有资源:
$ ceilometer resource-list
这个只获取与用户相关的项目事件
$ ceilometer event-list
总结:
我在代码、REST API 和终端中尝试过,所有结果都是一样的。作为管理员用户,当我 select 资源时,我得到了所有;但是对于事件,我只得到与我的项目相关的事件。
我需要一种方法来获取所有项目的所有事件。我也不明白为什么要对事件进行这样的控制!?
您需要使用 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)。此查询仅适用于使用管理员令牌的管理员用户。
我不能代表 python 客户端库以及它们是否公开它,但您可以直接从 API 成功查询它。我可以确认这是有效的,在 meshcloud 我们在生产中使用这个 API ;-)