Ansible Openstack получение/обновление учетных данных приложения

Вопрос или проблема

Я пытаюсь получить и обновить учетные данные приложения через модуль Ansible openstack.cloud, но не могу найти никакой информации об этом. Можно ли использовать Ansible для перечисления собственных учетных данных приложения и создания новых?

Я также пробовал с openstack.cloud.resource, но прокси openstacksdk выдает ошибку:

исходный код:

- name: Test
  openstack.cloud.resource:
    cloud: openstack
    service: identity
    type: application_credential
    attributes:
      user: myuser
      name: app_cred_name
  register: app_cred_data

ошибка:

An exception occurred during task execution. To see the full traceback, use -vvv. The error was: AttributeError: 'Proxy' object has no attribute 'update_application_credential'. Did you mean: 'create_application_credential'?
fatal: [localhost]: FAILED! => {"changed": false, "module_stderr": "Traceback (most recent call last):\n  File \"/home/vscode/.ansible/tmp/ansible-tmp-1695798933.7218165-40585-211051185410492/AnsiballZ_resource.py\", line 107, in <module>\n    _ansiballz_main()\n  File \"/home/vscode/.ansible/tmp/ansible-tmp-1695798933.7218165-40585-211051185410492/AnsiballZ_resource.py\", line 99, in _ansiballz_main\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n  File \"/home/vscode/.ansible/tmp/ansible-tmp-1695798933.7218165-40585-211051185410492/AnsiballZ_resource.py\", line 47, in invoke_module\n    runpy.run_module(mod_name="ansible_collections.openstack.cloud.plugins.modules.resource", init_globals=dict(_module_fqn='ansible_collections.openstack.cloud.plugins.modules.resource', _modlib_path=modlib_path),\n  File \"/usr/lib/python3.10/runpy.py\", line 224, in run_module\n    return _run_module_code(code, init_globals, run_name, mod_spec)\n  File \"/usr/lib/python3.10/runpy.py\", line 96, in _run_module_code\n    _run_code(code, mod_globals, init_globals,\n  File \"/usr/lib/python3.10/runpy.py\", line 86, in _run_code\n    exec(code, run_globals)\n  File \"/tmp/ansible_openstack.cloud.resource_payload_8dl_iu61/ansible_openstack.cloud.resource_payload.zip/ansible_collections/openstack/cloud/plugins/modules/resource.py\", line 425, in <module>\n  File \"/tmp/ansible_openstack.cloud.resource_payload_8dl_iu61/ansible_openstack.cloud.resource_payload.zip/ansible_collections/openstack/cloud/plugins/modules/resource.py\", line 421, in main\n  File \"/tmp/ansible_openstack.cloud.resource_payload_8dl_iu61/ansible_openstack.cloud.resource_payload.zip/ansible_collections/openstack/cloud/plugins/module_utils/openstack.py\", line 415, in __call__\n  File \"/tmp/ansible_openstack.cloud.resource_payload_8dl_iu61/ansible_openstack.cloud.resource_payload.zip/ansible_collections/openstack/cloud/plugins/modules/resource.py\", line 400, in run\n  File \"/tmp/ansible_openstack.cloud.resource_payload_8dl_iu61/ansible_openstack.cloud.resource_payload.zip/ansible_collections/openstack/cloud/plugins/module_utils/resource.py\", line 43, in __init__\n  File \"/tmp/ansible_openstack.cloud.resource_payload_8dl_iu61/ansible_openstack.cloud.resource_payload.zip/ansible_collections/openstack/cloud/plugins/module_utils/resource.py\", line 19, in default_crud_functions\nAttributeError: 'Proxy' object has no attribute 'update_application_credential'. Did you mean: 'create_application_credential'?\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}

Я только что попробовал это и согласен, что это не работает. Учетные данные приложений неизменяемы, поэтому метода обновления нет. Также методы get/find имеют дополнительный аргумент пользователя, который не будет работать с моделью openstack.cloud.resource. Я намерен предложить новый модуль application_credential.

Теперь в Ansible OpenStack коллекции есть модуль application_credential. Смотрите https://docs.ansible.com/ansible/latest/collections/openstack/cloud/application_credential_module.html#ansible-collections-openstack-cloud-application-credential-module

Ответ или решение

В мире ИТ, автоматизация рутинных задач и управление инфраструктурой через единые инструменты являются ключевыми приоритетами. Ansible, будучи мощным оркестрационным инструментом, предоставляет возможности для взаимодействия с OpenStack, который является одним из наиболее популярных решений для управления облачными инфраструктурами. Один из вызовов, с которым сталкиваются ИТ-специалисты, работающие с OpenStack через Ansible, это управление учетными данными приложений (application credentials) — задача, которая требует глубокой интеграции между Ansible и OpenStack.

Теория (Theory):

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

Ansible, со своей стороны, предлагает модульность и гибкость в управлении инфраструктурой. Коллекция openstack.cloud в Ansible предоставляет различные модули для работы с OpenStack, включая возможность создания, управления и удаления различных ресурсов, таких как виртуальные машины, сети и учетные данные.

Однако, как было отмечено в описанной проблеме, не все возможности OpenStack изначально реализованы в Ansible. В частности, управление учетными данными приложений может быть вызовом из-за отсутствия прямых методов для их обновления или перечисления через стандартные модули Ansible, такие как openstack.cloud.resource.

Пример (Example):

В предоставленном примере использование модуля openstack.cloud.resource для работы с учетными данными приложений сталкивается с ошибкой: отсутствие метода обновления (update) для учетных данных приложений. Поскольку учетные данные приложений в OpenStack являются неизменяемыми, такая операция как обновление просто не предусмотрена — их необходимо воссоздавать при изменениях.

Это иллюстрирует необходимость наличия специализированного модуля в Ansible для работы с этими уникальными аспектами OpenStack. Разработчики Ansible коллекции для OpenStack ответили на эти вызовы созданием отдельного модуля application_credential, который напрямую поддерживает эти операции.

Применение (Application):

Теперь, когда в Ansible OpenStack коллекции появился модуль application_credential, ИТ-специалисты могут более эффективно и правильно управлять учетными данными приложений. Этот модуль поддерживает операции создания и удаления учетных данных. Для получения списка учетных данных необходимо использовать другие методы, такие как API-запросы OpenStack, которые можно также автоматизировать через Ansible.

Чтобы воспользоваться новым модулем, можно следовать следующему примеру:

- name: Создать учетные данные приложения
  openstack.cloud.application_credential:
    cloud: "{{ openstack_cloud }}"
    name: "app_cred_name"
    user: "myuser"
    secret: "app_cred_secret"
  register: app_cred_data

Это обеспечит возможность безопасного управления учетными данными, одновременно следуя принципам автоматизации и безопасного ИТ-менеджмента.

В современном мире, где безопасность и автоматизация диктуют правила, использование таких инструментов, как Ansible, в комбинации с OpenStack, способствует достижению высокой эффективности в управлении облачной инфраструктурой. Создание, удаление и управление учетными данными приложений через Ansible позволяет не только упрощать процессы, но и обеспечивать максимальную безопасность и контроль над ресурсами.

Оцените материал
Добавить комментарий

Капча загружается...