Django Ceilometer为所有项目提供活动

时间:2018-03-16 11:37:53

标签: python django openstack ceilometer

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

更详细地解释:

以下是我的示例代码:

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进行身份验证。之后,它应该根据prjojects获取事件列表。这里的问题是,即使用户是管理员,我也只能获得管理员被指定为用户的事件。

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

# 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和终端中尝试过它,所有结果都是一样的。作为管理员用户,当我选择资源时,我得到所有;但是对于事件,我只获得与我的项目相关的事件。

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

1 个答案:

答案 0 :(得分:1)

您需要使用all_tenants eq True底部记录的public class AppException : Exception { private readonly string _innerStackTrace = ""; public AppException() : base() { } public AppException(string message, string stackTrace) : base(message) { this._innerStackTrace = stackTrace; } public override string StackTrace { get { return this._innerStackTrace; } } } 进行过滤查询。

  

2)指定'all_tenants = True'查询参数以获取所有项目的所有事件,这仅供管理员用户使用。

请注意,这是对Queens和Pike中可用的Panko / Ceilomter API的最新补充(虽然它也被移植到Ocata)。此查询仅适用于使用管理令牌的管理员用户。

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