Найти в Дзене
Эникей на передержке

Ansible от А до Я. Часть 2.1 | Инвентарь. Базовые понятия

Оглавление

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

⚠️ Перед продолжением рекомендую ознакомиться с предыдущей частью:

📝 О том, что такое Ansible:

Что такое инвентарь?

Инвентарь - это список (или группа списков) управляемых нод. В предыдущей части мы уже составили простой файл инвентаризации hosts.ini:

Содержимое hosts.ini из предыдущей части
Содержимое hosts.ini из предыдущей части

По умолчанию Ansible берёт информацию о хостах из файла '/etc/ansible/hosts'. Чтобы указать свой файл, необходимо использовать параметр '-i <путь к файлу>', например, как в предыдущей части:

-i ~/ansible/hosts.ini

Если потребуется использовать несколько файлов инвентаря, укажите параметр -i несколько раз:

-i test.ini -i prod.yml

Форматы файлов инвентаря

В большинстве случаев используются форматы INI или YAML, но есть возможность установить дополнительные плагины инвентаря, поддерживающие другие форматы, например, TOML.

Одна и та же информация в файлах инвентаря разных форматов: INI (слева), YAML (справа)
Одна и та же информация в файлах инвентаря разных форматов: INI (слева), YAML (справа)

Использование нескольких файлов инвентаря

Создадим каталог inventory, и переместим в него файлы инвентаря:

mkdir ~/ansible/inventory && mv ~/ansible/hosts* ~/ansible/inventory/

Так как в большинстве случаев мы будем использовать именно эти файлы, укажем в конфигурационном файле Ansible путь к ним. Откроем файл конфигурации на редактирование:

sudo nano /etc/ansible/ansible.cfg

Зададим в параметре inventory путь к каталогу ~/ansible/inventory/:

inventory = /home/username/ansible/inventory
Содержимое файла  /etc/ansible/ansible.cfg
Содержимое файла /etc/ansible/ansible.cfg

Группировка узлов

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

Допустимые имена групп

Именем группы может быть последовательность символов, включающая в себя латинские буквы, цифры и знак подчёркивания, при этом имя не может начинаться с цифры. Также имена групп не должны соответствовать ключевым словам Python'а или плейбука Ansible.

Чтобы не запутаться, начинайте имя группы с 'group_', например, 'group_windows'
Имена групп начинаются с 'group_'
Имена групп начинаются с 'group_'

Группы по умолчанию

Как я сказал выше, каждый хост принадлежит минимум двум группам, одна из них называется 'all'. Она включает в себя все хосты файла инвентаря.

Если мы не укажем какой группе принадлежит хост, он автоматически попадёт в группу 'ungrouped'. Как можно догадаться по названию, она включает в себя все не сгруппированные хосты.

Группы all и ungrouped являются группами пр умолчанию и не нуждаются в явном объявлении. В них можно задать значения переменных, которые будут применяться ко всем хостам группы (как мы сделали это для группы all в предыдущей части).

Добавить хост в несколько групп

Для добавления хоста в несколько групп достаточно прописать его в каждой группе:

Узлы deb12 и win10 включены в группу group_test, при этом продолжают являться членами своей "собственных" групп
Узлы deb12 и win10 включены в группу group_test, при этом продолжают являться членами своей "собственных" групп
Объединяйте хосты в группы по принципу "Что?", "Где?", "Когда?", т.е. по типу (терминальник/сервер 1С), по месту расположения (офис/ЦОД), по степени "готовности" (test/prod).

Группировка групп

Помимо группировки хостов, Ansible позволяет добавить одну группу в другую, что позволяет установить связь Родитель-Потомок:

Обратите внимание на ключевое слово children в родительской группе
Обратите внимание на ключевое слово children в родительской группе
Все члены дочерних групп автоматически становятся членами родительской группы. Т.е. хосты deb12 и win10 автоматически стали членами родительской группы 'group_test'.

Заключение

На этом первая часть раздела, касающегося инвентаря Ansible подошла к концу. Если у вас возникли сложности на каком-то этапе - опишите проблему и прикрепите скриншот в комментариях, я постараюсь помочь.

Позже здесь появится ссылка на следующую часть.

Контрольные вопросы:

  1. Если применить задание к group_deb и group_test в одной команде, сколько раз оно выполнится на узле deb12?
  2. Если применить задание к hosts.ini и hosts.yml, в каждом из которых есть одинаковые узлы, сколько раз выполнится задание для каждого узла?
  3. Может ли быть у одной группы несколько родительских (или дочерних) групп?

Поддержать мой труд любой суммой:

-8
  • Юmoney: 4100 1179 9102 819
  • Сбербанк: 2202 2013 5155 5152
  • Тинькофф: 2200 7008 1567 2323