Плагины инвентаризации
Плагины инвентаризации позволяют пользователям указывать источники данных для составления инвентаризации хостов, которые Ansible использует для целевой обработки задач, либо через параметры командной строки -i /path/to/file и/или -i 'host1, host2', либо из других источников конфигурации.
Включение плагинов инвентаризации
Большинство плагинов инвентаризации, поставляемых с Ansible, по умолчанию отключены и должны быть включены в список разрешённых в вашем файле ansible.cfg, чтобы работать. Вот как выглядит стандартный белый список в файле конфигурации, поставляемом с Ansible:
[inventory] enable_plugins = host_list, script, auto, yaml, ini, toml
Этот список также определяет порядок, в котором каждый плагин пытается проанализировать источник инвентаризации. Любые плагины, отсутствующие в списке, не будут рассмотрены, поэтому вы можете «оптимизировать» загрузку инвентаризации, сведя её к минимуму, к тому, что вы действительно используете. Например:
[inventory] enable_plugins = advanced_host_list, constructed, yaml
Плагин инвентаризации auto может использоваться для автоматического определения плагина инвентаризации, который следует использовать для файла конфигурации YAML. Он также может использоваться для плагинов инвентаризации в коллекции.
Чтобы включить в список разрешённых конкретные плагины инвентаризации в коллекции, необходимо использовать полное имя:
[inventory] enable_plugins = namespace.collection_name.inventory_plugin_name
Использование плагинов инвентаризации
Единственное требование для использования плагина инвентаризации после его включения — это предоставление источника инвентаризации для анализа. Ansible будет пытаться использовать список включённых плагинов инвентаризации по порядку для каждого предоставленного источника инвентаризации. После успешного анализа источника источником инвентаризации, все оставшиеся плагины инвентаризации будут пропущены для этого источника.
Чтобы начать использовать плагин инвентаризации с источником конфигурации YAML, создайте файл с принятой схемой имён файла для соответствующего плагина, а затем добавьте plugin: plugin_name. Каждый плагин документирует любые ограничения на именование. Например, плагин инвентаризации aws_ec2 должен оканчиваться на aws_ec2.(yml|yaml)
# demo.aws_ec2.yml plugin: aws_ec2
Или для плагина openstack файл должен называться clouds.yml или openstack.(yml|yaml):
# clouds.yml or openstack.(yml|yaml) plugin: openstack
Чтобы использовать плагин в коллекции, укажите полное имя:
plugin: namespace.collection_name.inventory_plugin_name
Плагин инвентаризации 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:
Если вы используете плагин инвентаризации в коллекции, связанной с playbook, и хотите протестировать свою конфигурацию с ansible-inventory, вам потребуется использовать флаг --playbook-dir.
Вы можете установить путь к источнику инвентаризации по умолчанию (через inventory в разделе ansible.cfg [defaults] или переменную среды ANSIBLE_INVENTORY) для вашего источника(источников) инвентаризации. Теперь выполнение 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 не будет изменена.
Если плагин инвентаризации поддерживает кеширование, вы можете включить и настроить параметры кеширования для отдельного источника конфигурации YAML или для нескольких источников инвентаризации с помощью переменных окружения или файлов конфигурации Ansible. Если вы включите кеширование для плагина инвентаризации без предоставления параметров кеширования, специфичных для инвентаризации, плагин инвентаризации будет использовать параметры кеширования фактов. Вот пример включения кеширования для отдельного файла конфигурации YAML:
# demo.aws_ec2.yml plugin: aws_ec2 cache: yes cache_plugin: jsonfile cache_timeout: 7200 cache_connection: /tmp/aws_inventory cache_prefix: aws_ec2
Вот пример настройки кеширования инвентаризации со значениями по умолчанию для кеширования фактов, используемого плагином кеширования, и тайм-аута в файле ansible.cfg:
[defaults] fact_caching = jsonfile fact_caching_connection = /tmp/ansible_facts cache_timeout = 3600 [inventory] cache = yes cache_connection = /tmp/ansible_inventory
Помимо плагинов кеширования, поставляемых с Ansible, плагины кеширования, подходящие для кеширования инвентаризации, также могут находиться в пользовательском пути к плагинам кеширования. Плагины кеширования в коллекциях пока не поддерживаются для инвентаризации.
Список плагинов
Вы можете использовать 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
- cloudscale — Источник инвентаризации cloudscale.ch
- constructed — Использует Jinja2 для построения переменных и групп на основе существующей инвентаризации
- docker_machine — Источник инвентаризации Docker Machine
- docker_swarm — Динамический плагин инвентаризации Ansible для узлов Docker swarm
- foreman — Источник инвентаризации foreman
- gcp_compute — Источник инвентаризации Google Cloud Compute Engine
- generator — Использует Jinja2 для построения хостов и групп из шаблонов
- gitlab_runners — Динамический плагин инвентаризации Ansible для GitLab runners
- hcloud — Динамический плагин инвентаризации Ansible для Hetzner Cloud
- host_list — Анализирует строку «список хостов»
- ini — Использует файл Ansible INI в качестве источника инвентаризации
- k8s — Источник инвентаризации Kubernetes (K8s)
- kubevirt — Источник инвентаризации KubeVirt
- linode — Динамический плагин инвентаризации Ansible для Linode
- netbox — Источник инвентаризации NetBox
- nmap — Использует nmap для поиска хостов для целей
- online — Онлайн-источник инвентаризации
- openshift — Источник инвентаризации OpenShift
- openstack — Источник инвентаризации OpenStack
- scaleway — Источник инвентаризации Scaleway
- script — Выполняет скрипт инвентаризации, возвращающий JSON
- toml — Использует определённый файл TOML в качестве источника инвентаризации
- tower — Динамический плагин инвентаризации Ansible для Ansible Tower
- virtualbox — Источник инвентаризации virtualbox
- vmware_vm_inventory — Источник инвентаризации VMware Guest
- vultr — Источник инвентаризации Vultr
- yaml — Использует определённый файл YAML в качестве источника инвентаризации
См. также
- Об общих сценариях
- Введение в общие сценарии
- Плагины обратных вызовов
- Плагины обратных вызовов 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.9/plugins/inventory.html