Определение

Ansible при помощи различных плагинов inventory использует переданные ему файлы/скрипты/данные и переводит все в JSON формат

В общем виде всего в Ansible есть 3 типа inventory:

  1. Статический — просто файл
  2. Каталог — директория с файлами
  3. Динамический — исполняемый файл

При этом при использовании 2 типа (Каталог) можно использовать 1 (Статический) и 3 (Динамический) одновременно, а результирующий инвентарь будет являться совокупностью всех инвентарей из этого каталога

Поддерживаемые форматы для статического типа ограничиваются плагинами inventory, которые можно написать самому, но в ansible.builtin (основа Ansible) можно использовать:

  • yaml - ansible.builtin.yaml
  • json - ansible.builtin.yaml (напомню, что правильно написанный JSON является корректным YAML)
  • ini - ansible.builtin.ini
  • toml - ansible.builtin.toml

Чаще всего используются yaml и ini, но согласно best-practice нужно использовать формат yaml Все типы плагинов для inventory можно найти тут (https://docs.ansible.com/ansible/latest/collections/index_inventory.html)

Практика

Для примера продемонстрирую одинаковый статический inventory в разных форматах:

inventory.ini:

[awx_root]
awx ansible_user=admin ansible_host=192.0.2.10

inventory.toml:

[all.vars]
ansible_user = "admin"

[awx_root.hosts]
awx = { ansible_host = "192.0.2.10" }

inventory.yml:

---
all:
  vars:
    ansible_user: admin
  hosts:
    awx:
      ansible_host: 192.0.2.10
  children:
    awx_root:
      hosts:
        awx:

inventory.json:

{
  "all": {
    "vars": {
      "ansible_user": "admin"
    },
    "hosts": {
      "awx": {
        "ansible_host": "192.0.2.10"
      }
    },
    "children": {
      "awx_root": {
        "hosts": {
          "awx": null
        }
      }
    }
  }
}

Используя команду ansible-inventory -i <имя_файла> --list можно проверить все 4 файла и увидеть, что получившийся JSON ответ будет одинаковым (можно добавить флаг --yaml для удобного вывода в формате yaml) Ansible Inventories

Более подробное описание с примерами для динамических инвентарей будет в отдельной статье