Spec-Zone.ru › Ansible 2.11

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

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

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

Spec-Zone.ru

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