Использование коллекций
Коллекции — это формат распространения контента Ansible, который может включать плейбуки, роли, модули и плагины. Вы можете устанавливать и использовать коллекции через Ansible Galaxy.
Установка коллекций
Установка коллекций с ansible-galaxy
Вы можете использовать команду ansible-galaxy collection install для установки коллекции на вашей системе.
Примечание
По умолчанию ansible-galaxy использует https://galaxy.ansible.com в качестве сервера Galaxy (как указано в файле ansible.cfg в разделе GALAXY_SERVER). Вам не требуется дополнительная настройка. Обратитесь к Настройка клиента ansible-galaxy, если вы используете другой сервер Galaxy, например Red Hat Automation Hub.
Для установки коллекции, размещенной в Galaxy:
ansible-galaxy collection install my_namespace.my_collection
Вы также можете напрямую использовать архивный файл из вашего сборки:
ansible-galaxy collection install my_namespace-my_collection-1.0.0.tar.gz -p ./collections
Примечание
Команда установки автоматически добавляет путь ansible_collections к пути, указанному с помощью опции -p, если родительский каталог ещё не находится в папке с названием ansible_collections.
При использовании опции -p для указания пути установки, используйте одно из значений, настроенных в COLLECTIONS_PATHS, так как именно здесь Ansible ожидает найти коллекции. Если вы не укажете путь, ansible-galaxy collection install установит коллекцию по первому пути, определенному в COLLECTIONS_PATHS, который по умолчанию равен ~/.ansible/collections
Вы также можете разместить коллекцию рядом с текущим плейбуком, в структуре каталогов collections/ansible_collections/
play.yml ├── collections/ │ └── ansible_collections/ │ └── my_namespace/ │ └── my_collection/<collection structure lives here>
Подробности о структуре каталогов коллекций см. в Структуре коллекции.
Установка более старой версии коллекции
По умолчанию ansible-galaxy устанавливает последнюю доступную коллекцию, но вы можете добавить идентификатор диапазона версий для установки конкретной версии.
Для установки версии 1.0.0 коллекции:
ansible-galaxy collection install my_namespace.my_collection:1.0.0
Для установки версии 1.0.0-beta.1 коллекции:
ansible-galaxy collection install my_namespace.my_collection:==1.0.0-beta.1
Для установки коллекций, больших или равных 1.0.0 или меньших 2.0.0:
ansible-galaxy collection install my_namespace.my_collection:>=1.0.0,<2.0.0
Вы можете указать несколько идентификаторов диапазона, разделенных ,. Вы можете использовать следующие идентификаторы диапазона:
-
*: Любая версия, по умолчанию используется, если не указан диапазон. -
!=: Версия не равна указанной. -
==: Версия должна быть указанной. -
>=: Версия больше или равна указанной. -
>: Версия больше указанной. -
<=: Версия меньше или равна указанной. -
<: Версия меньше указанной.
Примечание
Команда ansible-galaxy игнорирует любые предварительные версии, если не используется идентификатор диапазона == для явного указания предварительной версии.
Установка нескольких коллекций с помощью файла requirements
Вы также можете создать файл requirements.yml для установки нескольких коллекций одной командой. Этот файл — YAML-файл в формате:
--- collections: # With just the collection name - my_namespace.my_collection # With the collection name, version, and source options - name: my_namespace.my_other_collection version: 'version range identifiers (default: ``*``)' source: 'The Galaxy URL to pull the collection from (default: ``--api-server`` from cmdline)'
Ключ version может принимать тот же формат идентификатора диапазона, что и описано выше.
Роли также можно указать и поместить под ключ roles. Значения следуют тому же формату, что и файл requirements, используемый в более ранних версиях Ansible.
---
roles:
# Install a role from Ansible Galaxy.
- name: geerlingguy.java
version: 1.9.6
collections:
# Install a collection from Ansible Galaxy.
- name: geerlingguy.php_roles
version: 0.9.3
source: https://galaxy.ansible.com
Примечание
Хотя роли и коллекции можно указать в одном файле requirements, они устанавливаются по отдельности. ansible-galaxy role install -r requirements.yml будет устанавливать только роли, а ansible-galaxy collection install -r requirements.yml -p ./ — только коллекции.
Настройка клиента ansible-galaxy
По умолчанию ansible-galaxy использует https://galaxy.ansible.com в качестве сервера Galaxy (как указано в файле ansible.cfg в разделе GALAXY_SERVER).
Вы можете настроить его на использование других серверов (таких как Red Hat Automation Hub или пользовательский сервер Galaxy) следующим образом:
- Установите список серверов в параметре конфигурации GALAXY_SERVER_LIST в файле конфигурации.
- Используйте аргумент командной строки
--serverдля ограничения до отдельного сервера.
Чтобы настроить список серверов Galaxy в ansible.cfg:
- Добавьте опцию
server_listв раздел[galaxy]для одного или нескольких имен серверов. - Создайте новый раздел для каждого имени сервера.
- Установите параметр
urlдля каждого имени сервера.
Для Automation Hub вам дополнительно нужно:
- Установите параметр
auth_urlдля каждого имени сервера. - Установите токен API для каждого имени сервера. Перейдите на https://cloud.redhat.com/ansible/automation-hub/token/ и нажмите :Получить токен API из выпадающего списка версии, чтобы скопировать свой токен API.
Следующий пример показывает, как настроить несколько серверов:
[galaxy] server_list = automation_hub, my_org_hub, release_galaxy, test_galaxy [galaxy_server.automation_hub] url=https://cloud.redhat.com/api/automation-hub/ auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token token=my_ah_token [galaxy_server.my_org_hub] url=https://automation.my_org/ username=my_user password=my_pass [galaxy_server.release_galaxy] url=https://galaxy.ansible.com/ token=my_token [galaxy_server.test_galaxy] url=https://galaxy-dev.ansible.com/ token=my_test_token
Примечание
Вы можете использовать аргумент командной строки --server для выбора явного сервера Galaxy в server_list, и значение этого аргумента должно совпадать с именем сервера. Для использования сервера, отсутствующего в списке серверов, установите значение в URL-адрес доступа к этому серверу (все серверы в списке серверов будут проигнорированы). Также аргумент --api-key не применяется к предварительно определенным серверам. Он применяется только в случае отсутствия списка серверов или указания URL-адреса аргументом --server.
Параметры конфигурации списка серверов Galaxy
Параметр GALAXY_SERVER_LIST — это список идентификаторов серверов в порядке приоритета. При поиске коллекции процесс установки будет искать в этом порядке, например automation_hub сначала, затем my_org_hub, release_galaxy, и, наконец, test_galaxy до тех пор, пока коллекция не будет найдена. Фактическая инстанция Galaxy определяется в разделе [galaxy_server.{{ id }}], где {{ id }} — это идентификатор сервера, определенный в списке. Этот раздел может затем определить следующие ключи:
-
url: URL-адрес инстанции galaxy для подключения, это обязательно. -
token: Ключ токена для аутентификации на сервере Galaxy, взаимно исключающий сusername -
username: Имя пользователя для аутентификации по протоколу basic на сервере Galaxy, взаимно исключающий сtoken -
password: Пароль для аутентификации по протоколу basic -
auth_url: URL сервера Keycloak ‘token_endpoint’ при использовании SSO аутентификации (например, Automation Hub). Это взаимно исключающий сusername.auth_urlтребуетtoken.
Эти параметры сервера могут быть определены не только в файле ansible.cfg, но и как переменные среды. Переменная среды имеет вид ANSIBLE_GALAXY_SERVER_{{ id }}_{{ key }}, где {{ id }} — это заглавная форма идентификатора сервера, а {{ key }} — это ключ для определения. Например, я могу определить token для release_galaxy путем установки ANSIBLE_GALAXY_SERVER_RELEASE_GALAXY_TOKEN=secret_token.
Для операций, в которых используется только один сервер Galaxy, т.е. publish, info, login, используется первый элемент в server_list, если явно не был передан сервер в качестве аргумента командной строки.
Примечание
После того, как коллекция найдена, любые ее зависимости ищутся только в той же инстанции Galaxy, что и родительская коллекция. Процесс установки не будет искать зависимость коллекции в другой инстанции Galaxy.
Использование коллекций в плейбуке
После установки вы можете обратиться к содержимому коллекции по ее полному имени (FQCN):
- hosts: all
tasks:
- my_namespace.my_collection.mymodule:
option1: value
Это работает для ролей или любого типа плагина, распределенного внутри коллекции:
- hosts: all
tasks:
- import_role:
name: my_namespace.my_collection.role1
- my_namespace.mycollection.mymodule:
option1: value
- debug:
msg: '{{ lookup("my_namespace.my_collection.lookup1", 'param1')| my_namespace.my_collection.filter1 }}'
Чтобы избежать большого количества набора текста, вы можете использовать ключевое слово collections, добавленное в Ansible 2.8:
- hosts: all
collections:
- my_namespace.my_collection
tasks:
- import_role:
name: role1
- mymodule:
option1: value
- debug:
msg: '{{ lookup("my_namespace.my_collection.lookup1", 'param1')| my_namespace.my_collection.filter1 }}'
Это ключевое слово создаёт «путь поиска» для ссылок на плагины без пространства имён. Оно не импортирует роли или что-либо ещё. Обратите внимание, что для плагинов, не являющихся действиями или модулями, всё равно требуется FQCN.
См. также
- Разработка коллекций
- Разработка или изменение коллекции.
- Структура метаданных коллекции Galaxy
- Изучение структуры метаданных коллекций.
- Список рассылки
- Список рассылки для разработчиков
- irc.freenode.net
- Чат-канал IRC #ansible
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.9/user_guide/collections_using.html