Плагины инвентаризации
Плагины инвентаризации позволяют пользователям указывать источники данных для составления инвентаризации хостов, которые Ansible использует для назначения задач, используя параметры командной строки -i /path/to/file и/или -i 'host1, host2' или из других источников конфигурации.
Включение плагинов инвентаризации
Большинство плагинов инвентаризации, поставляемых с Ansible, включены по умолчанию или могут быть использованы с помощью плагина auto.
В некоторых случаях, например, если плагин инвентаризации не использует файл конфигурации YAML, вам может потребоваться включить конкретный плагин. Вы можете сделать это, установив enable_plugins в вашем файле ansible.cfg в разделе [inventory]. Изменение этого переопределит список плагинов, включенных по умолчанию. Вот список плагинов, включенных по умолчанию при установке Ansible:
[inventory] enable_plugins = host_list, script, auto, yaml, ini, toml
Если плагин находится в коллекции, используйте полное имя:
[inventory] enable_plugins = namespace.collection_name.inventory_plugin_name
Использование плагинов инвентаризации
Для использования плагина инвентаризации необходимо указать источник инвентаризации. В большинстве случаев это файл, содержащий информацию о хостах, или файл конфигурации YAML с опциями для плагина. Вы можете использовать флаг -i для указания источников инвентаризации или настройки пути к инвентаризации по умолчанию.
ansible hostname -i inventory_source -m ansible.builtin.ping
Чтобы начать использовать плагин инвентаризации с источником конфигурации YAML, создайте файл с принятой схемой имён файла, документированной для данного плагина, а затем добавьте plugin: plugin_name. Используйте полное имя, если плагин находится в коллекции.
# demo.aws_ec2.yml plugin: amazon.aws.aws_ec2
Каждый плагин должен документировать любые ограничения именования. Кроме того, файл конфигурации YAML должен заканчиваться расширением yml или yaml, чтобы быть включённым по умолчанию с плагином auto (в противном случае см. раздел выше по включению плагинов).
После указания всех необходимых опций вы можете просмотреть заполненную инвентаризацию с помощью ansible-inventory -i demo.aws_ec2.yml --graph.
@all: |--@aws_ec2: | |--ec2-12-345-678-901.compute-1.amazonaws.com | |--ec2-98-765-432-10.compute-1.amazonaws.com |--@ungrouped:
Если вы используете плагин инвентаризации в коллекции, связанной с playbook, и хотите протестировать свою настройку с помощью ansible-inventory, используйте флаг --playbook-dir.
Ваш источник инвентаризации может быть каталогом файлов конфигурации инвентаризации. Построенный плагин инвентаризации работает только с хостами, которые уже есть в инвентаризации, поэтому вы можете захотеть, чтобы конфигурация построенной инвентаризации обрабатывалась в определенный момент (например, в последнюю очередь). Ansible обрабатывает каталог рекурсивно, в алфавитном порядке. Вы не можете настроить подход к обработке, поэтому называйте свои файлы так, чтобы это работало предсказуемо. Плагины инвентаризации, которые расширяют функции построения, могут обойти это ограничение, добавив опции построения в дополнение к опциям плагина инвентаризации. В противном случае вы можете использовать -i с несколькими источниками, чтобы задать определённый порядок, например -i demo.aws_ec2.yml -i clouds.yml -i constructed.yml.
Вы можете создавать динамические группы, используя переменные хостов с построенной опцией keyed_groups. Опция groups также может использоваться для создания групп, а compose создаёт и изменяет переменные хостов. Вот пример aws_ec2, использующий построенные функции:
# demo.aws_ec2.yml
plugin: amazon.aws.aws_ec2
regions:
- us-east-1
- us-east-2
keyed_groups:
# add hosts to tag_Name_value groups for each aws_ec2 host's tags.Name variable
- key: tags.Name
prefix: tag_Name_
separator: ""
groups:
# add hosts to the group development if any of the dictionary's keys or values is the word 'devel'
development: "'devel' in (tags|list)"
compose:
# set the ansible_host variable to connect with the private IP address without changing the hostname
ansible_host: private_ip_address
Теперь вывод ansible-inventory -i demo.aws_ec2.yml --graph:
@all: |--@aws_ec2: | |--ec2-12-345-678-901.compute-1.amazonaws.com | |--ec2-98-765-432-10.compute-1.amazonaws.com | |--... |--@development: | |--ec2-12-345-678-901.compute-1.amazonaws.com | |--ec2-98-765-432-10.compute-1.amazonaws.com |--@tag_Name_ECS_Instance: | |--ec2-98-765-432-10.compute-1.amazonaws.com |--@tag_Name_Test_Server: | |--ec2-12-345-678-901.compute-1.amazonaws.com |--@ungrouped
Если хост не имеет переменных в конфигурации выше (другими словами, tags.Name, tags, private_ip_address), хост не будет добавлен в группы, кроме тех, которые создаёт плагин инвентаризации, и переменная хоста ansible_host не будет изменена.
Плагины инвентаризации, поддерживающие кеширование, могут использовать общие настройки для кеша фактов, определённые в разделе ansible.cfg файла [defaults] или определить настройки, специфичные для инвентаризации, в разделе [inventory]. Отдельные плагины могут определять настройки кеша, специфичные для плагина, в своём файле конфигурации:
# demo.aws_ec2.yml plugin: amazon.aws.aws_ec2 cache: yes cache_plugin: ansible.builtin.jsonfile cache_timeout: 7200 cache_connection: /tmp/aws_inventory cache_prefix: aws_ec2
Вот пример настройки кеширования инвентаризации со стандартными настройками кеширования фактов для используемого плагина кеша и таймаута в файле ansible.cfg.
[defaults] fact_caching = ansible.builtin.jsonfile fact_caching_connection = /tmp/ansible_facts cache_timeout = 3600 [inventory] cache = yes cache_connection = /tmp/ansible_inventory
Список плагинов инвентаризации
Вы можете использовать ansible-doc -t inventory -l для просмотра списка доступных плагинов. Используйте ansible-doc -t inventory <plugin name> для просмотра документации и примеров, специфичных для каждого плагина.
См. также
- Введение в playbooks
-
Введение в playbooks
- Плагины обратного вызова
-
Плагины обратного вызова Ansible
- Плагины соединений
-
Плагины соединений Ansible
- Использование фильтров для обработки данных
-
Плагины фильтров Jinja2
- Тесты
-
Плагины тестов Jinja2
- Поиск
-
Плагины поиска Jinja2
- Плагины переменных
-
Плагины переменных Ansible
- Список рассылки пользователей
-
Есть вопрос? Заходите на Google группу!
- 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.10/plugins/inventory.html