Spec-Zone.ru › Ansible

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

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

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

Если плагин находится в коллекции и не обнаруживается инструкцией auto, вы можете добавить полное квалифицированное имя:

[inventory]
enable_plugins = host_list, script, auto, yaml, ini, toml, namespace.collection_name.inventory_plugin_name

Или, если это локальный плагин, возможно, хранящийся в пути, установленного параметром DEFAULT_INVENTORY_PLUGIN_PATH, вы можете сослаться на него следующим образом:

[inventory]
enable_plugins = host_list, script, auto, yaml, ini, toml, my_plugin

Если вы используете плагин, поддерживающий YAML-источник конфигурации, убедитесь, что имя совпадает с именем, указанным в записи plugin файла источника инвентаризации. Для других плагинов вы должны либо сохранить его в одном из каталогов, настроенных в ansible.cfg, и включить его, или добавить в коллекцию и затем сослаться на него по FQCN.

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

Для использования плагина инвентаризации необходимо указать источник инвентаризации. В большинстве случаев это файл, содержащий информацию о хостах, или файл конфигурации YAML с параметрами для плагина. Вы можете использовать флаг -i для предоставления источников инвентаризации или настройки пути к инвентаризации по умолчанию.

ansible hostname -i inventory_source -m ansible.builtin.ping

Чтобы начать использовать плагин инвентаризации с YAML-источником конфигурации, создайте файл с допустимой схемой имен файла, документированной для данного плагина, затем добавьте plugin: plugin_name. Используйте полное квалифицированное имя, если плагин находится в коллекции.

Примечание

Плагины инвентаризации имеют требуемые шаблоны имен, которым они должны соответствовать, например:

Инвентаризация, включающая плагин инвентаризации kubevirt.core.kubevirt, должна использовать шаблон имени файла *.kubevirt.yml. Инвентаризация, включающая плагин инвентаризации servicenow.servicenow.now, должна использовать шаблон имени файла *.servicenow.yml.

# 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: ""
  # If you have a tag called "Role" which has the value "Webserver", this will add the group
  # role_Webserver and add any hosts that have that tag assigned to it.
  - key: tags.Role
    prefix: role
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)"
  # add hosts to the "private_only" group if the host doesn't have a public IP associated to it
  private_only: "public_ip_address is not defined"
compose:
  # use a private address where a public one isn't assigned
  ansible_host: public_ip_address|default(private_ip_address)
  # alternatively, set the ansible_host variable to connect with the private IP address without changing the hostname
  # ansible_host: private_ip_address
  # if you *must* set a string here (perhaps to identify the inventory source if you have multiple
  # accounts you want to use as sources), you need to wrap this in two sets of quotes, either ' then "
  # or " then '
  some_inventory_wide_string: '"Yes, you need both types of quotes here"'

Теперь результат 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
  |--@role_Webserver
  |  |--ec2-12-345-678-901.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 не будет изменена.

Плагины инвентаризации, поддерживающие кеширование, могут использовать общие настройки кэша фактов, определённые в разделе [defaults] файла ansible.cfg , или определять настройки, специфичные для инвентаризации, в разделе [inventory] . Отдельные плагины могут определять настройки кеша, специфичные для плагина, в своём файле конфигурации:

# demo.aws_ec2.yml
plugin: amazon.aws.aws_ec2
cache: true
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> для просмотра документации и примеров, специфичных для плагина.

См. также

Планы Ansible

Вступление к планам

Плагины обратной связи

Плагины обратной связи

Плагины подключения

Плагины подключения

Плагины фильтрации

Плагины фильтрации

Плагины тестирования

Плагины тестирования

Плагины поиска

Плагины поиска

Плагины переменных

Плагины переменных

Связь

Есть вопросы? Нужна помощь? Хотите поделиться своими идеями? Посетите руководство по общению Ansible

© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/plugins/inventory.html

Spec-Zone.ru

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