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

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

Всем привет! Сегодня рассмотрим что такое инвентарь, выберем удобный формат, научимся группировать хосты и устанавливать отношениях между группами. Как всегда просто о сложном с большим количеством примеров 📸. ⚠️ Перед продолжением рекомендую ознакомиться с предыдущей частью: 📝 О том, что такое Ansible: Что такое инвентарь? Инвентарь - это список (или группа списков) управляемых нод. В предыдущей части мы уже составили простой файл инвентаризации hosts.ini: По умолчанию Ansible берёт информацию о хостах из файла '/etc/ansible/hosts'. Чтобы указать свой файл, необходимо использовать параметр '-i <путь к файлу>', например, как в предыдущей части: -i ~/ansible/hosts.ini Если потребуется использовать несколько файлов инвентаря, укажите параметр -i несколько раз: -i test.ini -i prod.yml Форматы файлов инвентаря В большинстве случаев используются форматы INI или YAML, но есть возможность установить дополнительные плагины инвентаря, поддерживающие другие форматы, например, TOML. Использов
Оглавление

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

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

📝 О том, что такое 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