Использование коллекций в плейбуке
После установки можно ссылаться на содержимое коллекции, используя её полное имя (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 при загрузке плагинов или ролей. Обратите внимание: для плагинов, не являющихся действиями или модулями (например, lookup-плагинов, фильтров и тестов), по-прежнему требуется 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–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/collections_guide/collections_using_playbooks.html