Создание инвентаря
Инвентари упорядочивают управляемые узлы в централизованных файлах, которые предоставляют Ansible сведения о системах и сетевых расположениях. С помощью файла инвентаря Ansible может управлять большим количеством узлов одной командой.
Чтобы выполнить следующие шаги, вам понадобится IP-адрес или полное доменное имя (FQDN) хотя бы одной хост-системы. Для демонстрации хост может работать локально в контейнере или виртуальной машине. Также необходимо убедиться, что ваш открытый ключ SSH добавлен в файл authorized_keys на каждом хосте.
Продолжите знакомство с Ansible и создайте инвентарь следующим образом:
- Создайте файл с именем
inventory.iniв каталогеansible_quickstart, созданном на предыдущем шаге. -
Добавьте в файл
inventory.iniновую группу[myhosts]и укажите IP-адрес или полное доменное имя (FQDN) каждой хост-системы.[myhosts] 192.0.2.50 192.0.2.51 192.0.2.52
-
Проверьте свой инвентарь.
ansible-inventory -i inventory.ini --list
-
Проверьте доступность группы
myhostsв своем инвентаре.ansible myhosts -m ping -i inventory.ini
Примечание
Передайте параметр
-uкомандеansible, если имена пользователя на управляющем узле и управляемых узлах различаются.192.0.2.50 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } 192.0.2.51 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } 192.0.2.52 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }
Поздравляем, вы успешно создали инвентарь. Продолжите знакомство с Ansible, создав плейбук.
Инвентари в формате INI или YAML
Инвентари можно создавать как в файлах INI, так и в формате YAML. В большинстве случаев, например в примере из предыдущих шагов, файлы INI просты и удобны для чтения, если управляемых узлов немного.
По мере увеличения числа управляемых узлов создание инвентаря в формате YAML становится разумным вариантом. Например, следующий вариант эквивалентен inventory.ini, объявляет уникальные имена управляемых узлов и использует поле ansible_host:
myhosts:
hosts:
my_host_01:
ansible_host: 192.0.2.50
my_host_02:
ansible_host: 192.0.2.51
my_host_03:
ansible_host: 192.0.2.52
Советы по созданию инвентарей
- Убедитесь, что имена групп понятны и уникальны. Имена групп также чувствительны к регистру.
- Избегайте пробелов, дефисов и цифр в начале имен групп (используйте
floor_19, а не19th_floor). -
Логически группируйте узлы в инвентаре в соответствии с их назначением, расположением и временем.
- Назначение
-
Группируйте узлы по топологии, например: db, web, leaf, spine.
- Расположение
-
Группируйте узлы по географическому расположению, например: центр обработки данных, регион, этаж, здание.
- Время
-
Группируйте узлы по этапам, например: разработка, тестирование, предварительная подготовка, эксплуатация.
Использование метагрупп
Создайте метагруппу, которая объединяет несколько групп в инвентаре, используя следующий синтаксис:
metagroupname: children:
В следующем инвентаре показана базовая структура центра обработки данных. Этот пример инвентаря содержит метагруппу network, включающую все сетевые устройства, и метагруппу datacenter, включающую группу network и все веб-серверы.
leafs:
hosts:
leaf01:
ansible_host: 192.0.2.100
leaf02:
ansible_host: 192.0.2.110
spines:
hosts:
spine01:
ansible_host: 192.0.2.120
spine02:
ansible_host: 192.0.2.130
network:
children:
leafs:
spines:
webservers:
hosts:
webserver01:
ansible_host: 192.0.2.140
webserver02:
ansible_host: 192.0.2.150
datacenter:
children:
network:
webservers:
Группа может входить в несколько метагрупп. Например, группа network может входить как в метагруппу datacenter, так и в метагруппу ops:
leafs:
hosts:
leaf01:
ansible_host: 192.0.2.100
leaf02:
ansible_host: 192.0.2.110
spines:
hosts:
spine01:
ansible_host: 192.0.2.120
spine02:
ansible_host: 192.0.2.130
network:
children:
leafs:
spines:
datacenter:
children:
network:
ops:
children:
network:
Переменные, определенные для group_vars родительской группы, применяются к узлам дочерних групп, но значения, определенные в group_vars дочерней группы, переопределяют значения родительской группы. Для предсказуемого наследования рекомендуется определять каждую группу только в одной родительской метагруппе, хотя допускается несколько родительских групп.
Создание переменных
Переменные задают значения для управляемых узлов, например IP-адрес, полное доменное имя, операционную систему и пользователя SSH, поэтому их не нужно указывать при выполнении команд Ansible.
Переменные можно назначать отдельным хостам.
webservers:
hosts:
webserver01:
ansible_host: 192.0.2.140
http_port: 80
webserver02:
ansible_host: 192.0.2.150
http_port: 443
Переменные также можно назначать всем хостам в группе.
webservers:
hosts:
webserver01:
ansible_host: 192.0.2.140
http_port: 80
webserver02:
ansible_host: 192.0.2.150
http_port: 443
vars:
ansible_user: my_server_user
См. также
- Как создать инвентарь
-
Подробнее об инвентарях в формате
YAMLилиINI. - Добавление переменных в инвентарь
-
Подробнее о переменных инвентаря и их синтаксисе.
- Ansible Vault
-
Узнайте, как шифровать конфиденциальные данные в инвентаре, например пароли и ключи.
© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/getting_started/get_started_inventory.html