Всем привет! Сегодня рассмотрим что такое инвентарь, выберем удобный формат, научимся группировать хосты и устанавливать отношениях между группами. Как всегда просто о сложном с большим количеством примеров 📸.
⚠️ Перед продолжением рекомендую ознакомиться с предыдущей частью:
📝 О том, что такое Ansible:
Что такое инвентарь?
Инвентарь - это список (или группа списков) управляемых нод. В предыдущей части мы уже составили простой файл инвентаризации hosts.ini:
По умолчанию Ansible берёт информацию о хостах из файла '/etc/ansible/hosts'. Чтобы указать свой файл, необходимо использовать параметр '-i <путь к файлу>', например, как в предыдущей части:
-i ~/ansible/hosts.ini
Если потребуется использовать несколько файлов инвентаря, укажите параметр -i несколько раз:
-i test.ini -i prod.yml
Форматы файлов инвентаря
В большинстве случаев используются форматы INI или YAML, но есть возможность установить дополнительные плагины инвентаря, поддерживающие другие форматы, например, TOML.
Использование нескольких файлов инвентаря
Создадим каталог inventory, и переместим в него файлы инвентаря:
mkdir ~/ansible/inventory && mv ~/ansible/hosts* ~/ansible/inventory/
Так как в большинстве случаев мы будем использовать именно эти файлы, укажем в конфигурационном файле Ansible путь к ним. Откроем файл конфигурации на редактирование:
sudo nano /etc/ansible/ansible.cfg
Зададим в параметре inventory путь к каталогу ~/ansible/inventory/:
inventory = /home/username/ansible/inventory
Группировка узлов
Все хосты в файле инвентаризации принадлежат минимум двум группам (об этом расскажу чуть ниже). В INI-файлах имена групп указываются в квадратных скобках, в YAML имена групп указываются в виде ключа (перед двоеточием, см. скриншот выше).
Допустимые имена групп
Именем группы может быть последовательность символов, включающая в себя латинские буквы, цифры и знак подчёркивания, при этом имя не может начинаться с цифры. Также имена групп не должны соответствовать ключевым словам Python'а или плейбука Ansible.
Чтобы не запутаться, начинайте имя группы с 'group_', например, 'group_windows'
Группы по умолчанию
Как я сказал выше, каждый хост принадлежит минимум двум группам, одна из них называется 'all'. Она включает в себя все хосты файла инвентаря.
Если мы не укажем какой группе принадлежит хост, он автоматически попадёт в группу 'ungrouped'. Как можно догадаться по названию, она включает в себя все не сгруппированные хосты.
Группы all и ungrouped являются группами пр умолчанию и не нуждаются в явном объявлении. В них можно задать значения переменных, которые будут применяться ко всем хостам группы (как мы сделали это для группы all в предыдущей части).
Добавить хост в несколько групп
Для добавления хоста в несколько групп достаточно прописать его в каждой группе:
Объединяйте хосты в группы по принципу "Что?", "Где?", "Когда?", т.е. по типу (терминальник/сервер 1С), по месту расположения (офис/ЦОД), по степени "готовности" (test/prod).
Группировка групп
Помимо группировки хостов, Ansible позволяет добавить одну группу в другую, что позволяет установить связь Родитель-Потомок:
Все члены дочерних групп автоматически становятся членами родительской группы. Т.е. хосты deb12 и win10 автоматически стали членами родительской группы 'group_test'.
Заключение
На этом первая часть раздела, касающегося инвентаря Ansible подошла к концу. Если у вас возникли сложности на каком-то этапе - опишите проблему и прикрепите скриншот в комментариях, я постараюсь помочь.
Позже здесь появится ссылка на следующую часть.
Контрольные вопросы:
- Если применить задание к group_deb и group_test в одной команде, сколько раз оно выполнится на узле deb12?
- Если применить задание к hosts.ini и hosts.yml, в каждом из которых есть одинаковые узлы, сколько раз выполнится задание для каждого узла?
- Может ли быть у одной группы несколько родительских (или дочерних) групп?
Поддержать мой труд любой суммой:
- Юmoney: 4100 1179 9102 819
- Сбербанк: 2202 2013 5155 5152
- Тинькофф: 2200 7008 1567 2323