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

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

Спасибо за ответ. Полагаю, у Митаки это не работает. Я попробовал, и в api он вернул «Неизвестный аргумент». Я также попробовал all_projects, и снова безуспешно. Я полагаю, согласно вашему ответу и моим испытаниям, это не поддерживается в Митаке.

Fuat Ulugay 12.04.2018 13:03

Другие вопросы по теме