Плагины инвентаризации
Плагины инвентаризации позволяют пользователям указывать источники данных для составления инвентаризации хостов, которые Ansible использует для назначения задач, либо через параметры командной строки -i /path/to/file и/или -i 'host1, host2', либо из других источников конфигурации.
Включение плагинов инвентаризации
Большинство плагинов инвентаризации, поставляемых с Ansible, по умолчанию отключены и требуют включения в ваш файл ansible.cfg для работы. Вот как выглядит стандартный белый список в файле конфигурации, поставляемом с Ansible:
[inventory] enable_plugins = host_list, script, yaml, ini, auto
Этот список также определяет порядок, в котором каждый плагин пытается обработать источник инвентаризации. Любые плагины, отсутствующие в списке, не будут рассматриваться, поэтому вы можете «оптимизировать» загрузку инвентаризации, сводя её к минимуму до необходимых плагинов. Например:
[inventory] enable_plugins = advanced_host_list, constructed, yaml
Использование плагинов инвентаризации
Единственное требование для использования плагина инвентаризации после его включения — предоставление источника инвентаризации для обработки. Ansible будет пытаться использовать список включенных плагинов инвентаризации по порядку для каждого предоставленного источника инвентаризации. Как только плагин инвентаризации успешно обработает источник, остальные плагины инвентаризации будут пропущены для этого источника.
Чтобы начать использовать плагин инвентаризации с источником конфигурации YAML, создайте файл с принятой схемой имён для соответствующего плагина, затем добавьте plugin: plugin_name. Каждый плагин документирует любые ограничения именования. Например, плагин инвентаризации aws_ec2:
# demo.aws_ec2.yml plugin: aws_ec2
Или для плагина openstack:
# clouds.yml plugin: openstack
Плагин инвентаризации auto включен по умолчанию и работает, используя поле plugin, чтобы указать плагин, который должен попытаться обработать его. Вы можете настроить белый список/приоритет используемых плагинов инвентаризации для обработки источника, используя ansible.cfg [‘inventory’] enable_plugins список. После включения плагина и предоставления необходимых параметров вы можете просмотреть заполненную инвентаризацию с помощью 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:
Вы можете установить путь к инвентаризации по умолчанию (через inventory в разделе ansible.cfg [defaults] или переменную окружения ANSIBLE_HOSTS) для вашего источника инвентаризации. Теперь выполнение ansible-inventory --graph должно дать тот же результат, что и при непосредственном передаче вашего(их) источника(ов) конфигурации YAML. Вы можете добавить пользовательские плагины инвентаризации в ваш путь плагинов, чтобы использовать их таким же образом.
Ваш источник инвентаризации может быть каталогом файлов конфигурации инвентаризации. Созданный плагин инвентаризации работает только с хостами, уже присутствующими в инвентаризации, поэтому вы можете захотеть, чтобы сконструированная конфигурация инвентаризации обрабатывалась в определённый момент (например, в последнюю очередь). Ansible обрабатывает каталог рекурсивно, в алфавитном порядке. Вы не можете настроить подход к обработке, поэтому назовите свои файлы, чтобы всё работало предсказуемо. Плагины инвентаризации, расширяющие возможности построения, могут обойти это ограничение, добавив опции построения в дополнение к опциям плагина инвентаризации. В противном случае вы можете использовать -i с несколькими источниками, чтобы установить определённый порядок, например, -i demo.aws_ec2.yml -i clouds.yml -i constructed.yml.
Вы можете создавать динамические группы, используя переменные хостов с помощью опции keyed_groups в конструкторе. Опция groups также может использоваться для создания групп, а compose создаёт и изменяет переменные хостов. Вот пример aws_ec2, использующий возможности построения:
# demo.aws_ec2.yml
plugin: 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-doc -t inventory -l для просмотра списка доступных плагинов. Используйте ansible-doc -t inventory <plugin name> для просмотра документации и примеров, специфичных для каждого плагина.
- advanced_host_list — Обрабатывает список хостов с диапазонами
- auto — Загружает и выполняет плагин инвентаризации, указанный в конфигурации YAML
- aws_ec2 — источник инвентаризации ec2
- aws_rds — источник инстансов rds
- azure_rm — плагин инвентаризации Azure Resource Manager
- constructed — Использует Jinja2 для построения переменных и групп на основе имеющейся инвентаризации.
- foreman — источник инвентаризации foreman
- gcp_compute — источник инвентаризации Google Cloud Compute Engine
- generator — Использует Jinja2 для построения хостов и групп из шаблонов
- host_list — Обрабатывает строку списка хостов
- ini — Использует файл Ansible INI в качестве источника инвентаризации.
- k8s — источник инвентаризации Kubernetes (K8s)
- nmap — Использует nmap для поиска хостов для назначения
- openshift — источник инвентаризации OpenShift
- openstack — источник инвентаризации OpenStack
- scaleway — источник инвентаризации Scaleway
- script — Выполняет скрипт инвентаризации, возвращающий JSON
- tower — динамический плагин инвентаризации Ansible для Ansible Tower.
- virtualbox — источник инвентаризации virtualbox
- vmware_vm_inventory — источник инвентаризации VMware Guest
- vultr — источник инвентаризации Vultr
- yaml — Использует определённый YAML-файл в качестве источника инвентаризации.
См. также
- О Playbook
- Введение в Playbook
- Плагины обратной связи
- Плагины обратной связи 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.7/plugins/inventory.html