Django云高计获取所有项目的事件

2024-06-01 14:40:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我在获取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    

摘要:

我在代码、restapi和终端中进行了尝试,结果都是一样的。作为管理员用户,当我选择资源时,我得到所有资源;但是对于事件,我只得到与我的项目相关的事件。你知道吗

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


Tags: 项目用户列表fordriver事件manager资源
1条回答
网友
1楼 · 发布于 2024-06-01 14:40:42

您需要使用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.

请注意,这是对Panko/Ceilomter API的一个相当新的补充,Panko/Ceilomter API可在Queens和Pike中使用(尽管它也被后传给了OCTA)。此查询仅对使用管理员令牌的管理员用户可用。你知道吗

我不能代表python客户机libs以及它们是否公开了它,但是您可以直接从API成功地查询它。我可以确认这是可行的,在meshcloud我们在生产中使用这个API;-)

相关问题 更多 >