Джанго 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)
Функция примера использует драйвер, который я написал. И драйвер сначала аутентифицируется с помощью имени пользователя, пароля и идентификатора проекта. После этого он должен получить список событий на основе 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 ответ
Вы должны сделать запрос фильтрации, используя all_tenants eq True
как указано в нижней части документации API.
2) Укажите параметр запроса 'all_tenants = True', чтобы получить все события для всех проектов, это разрешено только пользователям с правами администратора.
Обратите внимание, что это довольно недавнее дополнение к API Panko / Ceilomter, доступное в Квинсе и Пайке (хотя оно также перенесено в Ocata). Этот запрос доступен только для администраторов, использующих токен администратора.
Я не могу говорить о клиентских библиотеках Python и о том, выставляют ли они его, но вы можете успешно запросить его прямо из API. Я могу подтвердить это работает, в meshcloud мы используем этот API в производстве;-)