Инвентарный файл - это файл, в котором описываются устройства, к которым Ansible будет подключаться.
В инвентарном файле устройства могут указываться используя IP-адреса или имена. Устройства могут быть указаны по одному или разбиты на группы.
Файл описывается в формате INI. Пример файла:
r5.example.com [cisco-routers] 192.168.255.1 192.168.255.2 192.168.255.3 192.168.255.4 [cisco-edge-routers] 192.168.255.1 192.168.255.2
Название, которое указано в квадратных скобках - это название группы. В данном случае, созданы две группы устройств: cisco-routers и cisco-edge-routers.
Обратите внимание, что адреса 192.168.255.1 и 192.168.255.2 находятся в двух группах. Это нормальная ситуация, один и тот же адрес или имя хоста, можно помещать в разные группы.
Таким образом можно применять отдельно какие-то политики для группы cisco-edge-routers, но в то же время, когда необходимо настроить что-то, что касается всех маршрутизаторов, можно использовать группу cisco-routers.
К разбиению на группы надо подходить внимательно. Ansible это еще и, в какой-то мере, система описания инфраструктуры. Позже мы будем рассматривать групповые переменные и роли, где значение групп будет заметно в полной мере.
По умолчанию, файл находится в /etc/ansible/hosts
.
Но можно создавать свой инвентарный файл и использовать его. Для этого нужно, либо указать его при запуске ansible, используя опцию -i <путь>
, либо указать файл в конфигурационном файле Ansible.
Часто инвентарный файл размещают в каталоге inventories
, который создают в корне каталога с playbook. Это дает возможность хранить информацию про хосты вместе с остальной информацией в системе контроля версий.
Если инфраструктура большая и хостов много, то имеет смысл разбить инвентарный файл на несколько частей:
inventories/ ├── branch-A │ ├── cisco-routers │ └── cisco-switches ├── branch-B │ ├── cisco-routers │ └── cisco-switches └── headquarter ├── cisco-routers ├── cisco-switches └── juniper-routers
Если какое-то из устройств использует нестандартный порт SSH, порт можно указать после имени или адреса устройства, через двоеточие (ниже показан пример).
Такой вариант указания порта работает только с подключениями OpenSSH и не работает с paramiko.
Пример инвентарного файла, с использованием нестандартных портов для SSH:
[cisco-routers] 192.168.255.1:22022 192.168.255.2:22022 192.168.255.3:22022 [cisco-switches] 192.168.254.1 192.168.254.2
Если в группу надо добавить несколько устройств с однотипными именами, можно использовать такой вариант записи:
[cisco-routers] 192.168.255.[1:5]
Такая запись означает, что в группу попадут устройства с адресами 192.168.255.1-192.168.255.5. Этот формат записи поддеживается и для имен хостов:
[cisco-routers] router[A:D].example.com
Ansible также позволяет объединять группы устройств в общую группу. Для этого используется специальный синтаксис:
[cisco-routers] 192.168.255.1 192.168.255.2 192.168.255.3 [cisco-switches] 192.168.254.1 192.168.254.2 [cisco-devices:children] cisco-routers cisco-switches
По-умолчанию, в Ansible существует две группы: all и ungrouped. Первая включает в себя все хосты, а вторая, соответственно, хосты, которые не принадлежат ни одной из групп.