Определение
Ansible при помощи различных плагинов inventory использует переданные ему файлы/скрипты/данные и переводит все в JSON формат
В общем виде всего в Ansible есть 3 типа inventory:
Статический
— просто файлКаталог
— директория с файламиДинамический
— исполняемый файл
При этом при использовании 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)
Более подробное описание с примерами для динамических инвентарей будет в отдельной статье