Использование коллекций в плейбуке
После установки вы можете обратиться к содержимому коллекции по ее полному имени (FQCN):
- name: Reference a collection content using its FQCN
hosts: all
tasks:
- name: Call a module using FQCN
my_namespace.my_collection.my_module:
option1: value
Это работает для ролей или любого типа плагина, распределенного в рамках коллекции:
- name: Reference collections contents using their FQCNs
hosts: all
tasks:
- name: Import a role
ansible.builtin.import_role:
name: my_namespace.my_collection.role1
- name: Call a module
my_namespace.mycollection.my_module:
option1: value
- name: Call a debug task
ansible.builtin.debug:
msg: '{{ lookup("my_namespace.my_collection.lookup1", 'param1')| my_namespace.my_collection.filter1 }}'
Упрощение имен модулей с помощью ключевого слова collections
Ключевое слово collections позволяет определить список коллекций, которые роль или плейбук должны искать для неуточнённых имён модулей и действий. Таким образом, вы можете использовать ключевое слово collections, а затем просто ссылаться на модули и плагины действий по их кратким именам в рамках этой роли или плейбука.
Предупреждение
Если ваш плейбук использует ключевое слово collections и одну или несколько ролей, роли не наследуют коллекции, заданные плейбуком. Это одна из причин, по которой мы рекомендуем всегда использовать FQCN. См. ниже подробности о ролях.
Использование collections в ролях
В рамках роли вы можете контролировать, какие коллекции Ansible ищет для задач внутри роли, используя ключевое слово collections в meta/main.yml роли. Ansible будет использовать список коллекций, определённый внутри роли, даже если плейбук, вызывающий роль, определяет разные коллекции в отдельной записи ключевого слова collections. Роли, определённые внутри коллекции, всегда неявно сначала ищут в своей собственной коллекции, поэтому вам не нужно использовать ключевое слово collections для доступа к модулям, действиям или другим ролям, содержащимся в той же коллекции.
# myrole/meta/main.yml collections: - my_namespace.first_collection - my_namespace.second_collection - other_namespace.other_collection
Использование collections в плейбуках
В плейбуке вы можете управлять коллекциями, в которых Ansible ищет модули и плагины действий для выполнения. Однако любые роли, которые вы вызываете в своём плейбуке, определяют свой собственный порядок поиска коллекций; они не наследуют настройки вызывающего плейбука. Это верно даже в том случае, если роль не определяет свой собственный collections ключ.
- name: Run a play using the collections keyword
hosts: all
collections:
- my_namespace.my_collection
tasks:
- name: Import a role
ansible.builtin.import_role:
name: role1
- name: Run a module not specifying FQCN
my_module:
option1: value
- name: Run a debug task
ansible.builtin.debug:
msg: '{{ lookup("my_namespace.my_collection.lookup1", "param1")| my_namespace.my_collection.filter1 }}'
Ключ collections просто создаёт упорядоченный «путь поиска» для плагинов и ссылок на роли без именованных пространств. Он не устанавливает содержимое и не изменяет поведение Ansible относительно загрузки плагинов или ролей. Обратите внимание, что для плагинов модулей или действий (например, для поисковых запросов, фильтров и тестов) всё ещё требуется FQCN.
При использовании ключа collections нет необходимости добавлять ansible.builtin в список поиска. Если он опущен, по умолчанию доступно следующее содержимое:
- Стандартные модули и плагины Ansible, доступные через
ansible-base/ansible-core - Поддержка старых путей плагинов сторонних разработчиков
В общем случае предпочтительнее использовать FQCN модуля или плагина вместо ключа collections.
Использование плейбука из коллекции
Новая функция версии 2.11.
Вы также можете размещать плейбуки в вашей коллекции и вызывать их, используя ту же семантику, что и для плагинов:
ansible-playbook my_namespace.my_collection.playbook1 -i ./myinventory
Изнутри плейбука:
- name: Import a playbook ansible.builtin.import_playbook: my_namespace.my_collection.playbookX
Несколько рекомендаций при создании таких плейбуков: hosts: должны быть универсальными или, по крайней мере, иметь входные переменные.
- hosts: all # Use --limit or customized inventory to restrict hosts targeted
- hosts: localhost # For things you want to restrict to the control node
- hosts: '{{target|default("webservers")}}' # Assumes inventory provides a 'webservers' group, but can also use ``-e 'target=host1,host2'``
Это создаст неявную запись в ключе collections: со значением my_namespace.my_collection аналогично ролям.
Примечание
- Имена плейбуков, как и другие ресурсы коллекции, имеют ограниченный набор допустимых символов. Имена могут содержать только строчные буквенно-цифровые символы, а также символ _ и должны начинаться с буквы. Тире
-недопустимо в именах плейбуков в коллекциях. Плейбуки с именами, содержащими недопустимые символы, недоступны: это ограничение интерпретатора Python, используемого для загрузки ресурсов коллекции. - Плейбуки в коллекциях не поддерживают «смежные» плагины, все плагины должны находиться в каталогах, специфичных для коллекции.
© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/collections_guide/collections_using_playbooks.html