MyTetra Share
Делитесь знаниями!
Кратко: как пользоваться динамическим инвентарем в Ansible?
Время создания: 18.07.2023 12:09
Текстовые метки: ansible, динамический, инвентарь, inventory
Раздел: Компьютер - Linux - Оркестрация - Ansible
Запись: xintrea/mytetra_syncro/master/base/1689671367cjyq50gsco/text.html на raw.github.com

Для использования динамического инвентаря в Ansible, нужно выполнить следующие шаги:


  1. Создать скрипт или плагин, который будет генерировать динамический инвентарь. Совершенно без разницы, на каком языке пишется скрипт/плагин - это может быть Bash, Perl, Python, PHP, Lua и что угодно еще. На практике, обычно, используют язык Python, так как сама Ansiblt написана на Python. Главное, чтобы в скрипте был прописан BANG-заголовок (первая строка типа #!/bin/python3), благодаря чему Shell сможет запускать скрипт как исполнимый файл. Этот скрипт или плагин должен возвращать JSON-структуру (многострочную строку) с информацией о хостах и их атрибутах. Другими словами, скрипт должен печатать в консоль инвентарь в формате JSON.
  2. Убедиться, что данный скрипт или плагин исполняемый. Если используется именно скрипт, необходимо ему установить права на исполнение (chmod +x my_dynamic_inventory.py).
  3. Указать данный скрипт или плагин в качестве источника инвентарной информации при выполнении плейбука или команды Ansible. Это делается с помощью опции -i или параметра ansible_inventory в конфигурационном файле ansible.cfg.


Примечание: динамический инвентарь работает только, если генерируется инвентарь в формате JSON. Если сгенерировать инвентарь в формате YAML (*.yml) или в формате INI, то динамический инвентарь работать не будет. Возможно, эту недоработку исправят в новых версиях Ansible. Так же следует учитывать, что формат JSON, согласно своей спецификации, не поддерживает комментарии. Это очень неудобно, но таковы реалии данного формата.


Примеры использования:


  • Указание динамического инвентаря через флаг -i:


ansible-playbook -i my_dynamic_inventory.py my_playbook.yml


  • Указание динамического инвентаря через конфигурационный файл ansible.cfg (формат INI-файла):


[defaults]

inventory = /path/to/my_dynamic_inventory.py



Далее можно использовать группы хостов, которые определяются в динамическом интентаре, точно так же как и обычные группы хостов. Вот пример такого плейбука:


- name: Example playbook

hosts: my_dynamic_group

tasks:

- name: Task 1

...


В этом примере my_dynamic_group - это группа хостов, которая была определена в динамическом инвентаре.

При выполнении плейбука или команды ansible, система Ansible вызовет вышеуказанный скрипт или плагин для получения актуальной информации о хостах, и эта информация будет использоваться для определения набора хостов, с которыми Ansible будет работать.


Следует обратить внимание, что формат и структура динамического инвентаря находятся в прямой зависимости от скрипта динамического инвентаря, поэтому необходимо убедиться, что его вывод генерируется в соответствии с обслуживаемой инфраструктурой.


При определенных условиях, Ansible может вызывать скрипт динамического инвенторя в различными параметрами. Поэтому после того, как правильно заработает скрипт динамического инвенторя без обработки параметров (на первое время этого хватит), далее надо будет озаботиться чтением документации и поддержкой скриптом тех параметров, которые могут потребоваться в работе.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования