Spec-Zone.ru › Ansible 2.8

Плагины инвентаризации

  • Включение плагинов инвентаризации
  • Использование плагинов инвентаризации
  • Список плагинов

Плагины инвентаризации позволяют пользователям указывать источники данных для составления инвентаризации хостов, которые 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

Использование плагинов инвентаризации

Единственное требование для использования плагина инвентаризации после его включения — это предоставление источника инвентаризации для обработки. 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

Плагин инвентаризации 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_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 = json
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> для просмотра документации и примеров, относящихся к конкретным плагинам.

  • advanced_host_list — Обрабатывает список хостов с диапазонами
  • auto — Загружает и выполняет плагин инвентаризации, указанный в конфигурации YAML
  • aws_ec2 — Источник инвентаризации EC2
  • aws_rds — Источник инстансов RDS
  • azure_rm — Плагин инвентаризации Azure Resource Manager
  • cloudscale — Источник инвентаризации cloudscale.ch
  • constructed — Использует Jinja2 для построения переменных и групп на основе существующей инвентаризации
  • 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
  • vultr — Источник инвентаризации Vultr
  • yaml — Использует конкретный файл YAML в качестве источника инвентаризации

См. также

О Playbook
Введение в Playbook
Плагины обратного вызова
Плагины обратного вызова Ansible
Плагины подключения
Плагины подключения Ansible
Фильтры
Плагины фильтров Jinja2
Тесты
Плагины тестов Jinja2
Поиск
Плагины поиска Jinja2
Плагины переменных
Плагины переменных Ansible
Пользовательская рассылка
Есть вопрос? Обратитесь в группу!
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.8/plugins/inventory.html

Spec-Zone.ru

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