Django 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. После этого он должен получить список событий на основе проектов. Проблема здесь в том, что даже если пользователь является администратором, я могу получить только те события, которые администратор назначен пользователем.

Например, вместо получения событий, когда я пытаюсь получить список ресурсов, я получаю все. Однако, когда я пробую события, я получаю только события проектов для пользователя.

# 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 и терминале, и все результаты одинаковы. Как администратор, когда я выбираю ресурсы, я получаю все; однако для событий я получаю только события, относящиеся к моим проектам.

Мне нужен способ получить все события для всех проектов. Я тоже не понимаю, зачем такой контроль событий!?


person Fuat Ulugay    schedule 16.03.2018    source источник


Ответы (1)


Вам нужно сделать фильтрующий запрос, используя all_tenants eq True, как описано в нижней части документации по API. .

2) Укажите параметр запроса all_tenants=True, чтобы получить все события для всех проектов, это разрешено только пользователям с правами администратора.

Обратите внимание, что это довольно недавнее дополнение к API Panko/Ceilomter, доступному в Queens и Pike (хотя оно также было перенесено на Ocata). Этот запрос доступен только пользователям-администраторам, использующим токен администратора.

Я не могу говорить о клиентских библиотеках Python и о том, раскрывают ли они их, но вы можете успешно запросить их прямо из API. Я могу подтвердить, что это работает, в meshcloud мы используем этот API в производстве ;-)

person Johannes Rudolph    schedule 12.04.2018
comment
Спасибо за ответ. Я полагаю, это не работает для Митаки. Я попробовал это, и в API он вернул неизвестный аргумент. Я также попробовал all_projects и снова безуспешно. Я полагаю, согласно вашему ответу и моим испытаниям, он не поддерживается в Митаке. - person Fuat Ulugay; 12.04.2018