Вопрос или проблема
Я пытаюсь получить и обновить учетные данные приложения через модуль 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 позволяет не только упрощать процессы, но и обеспечивать максимальную безопасность и контроль над ресурсами.