Spec-Zone.ru › Ansible

Использование коллекций в плейбуке

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

  1. Стандартные модули и плагины Ansible, доступные через ansible-base/ansible-core
  2. Поддержка старых путей плагинов сторонних разработчиков

В общем случае предпочтительнее использовать 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API