Ansible #2: Inventory и группы серверов
| Подробности урока | |
|---|---|
| Уровень сложности | Лёгкий |
| Права root | Требуются |
| Требования | Терминал Linux |
| Категория | Настройка ПО |
| Совместимость с ОС | Debian, Ubuntu |
| Примерное время чтения | 20 мин |
Введение
В первой статье мы установили Ansible, настроили подключение к серверу и выполнили первые команды. В этой статье разберём Inventory - файл, в котором Ansible хранит информацию об управляемых серверах.
С помощью Inventory можно:
-
добавлять несколько серверов;
-
объединять серверы в группы;
-
задавать параметры подключения;
-
создавать переменные для отдельных серверов и групп;
-
хранить настройки в
group_varsиhost_vars.
Инструкция
Создание Inventory
Перейдём в каталог Ansible:
cd /opt/ansible
Создадим Inventory:
[servers]
server1 ansible_host=192.168.88.10
server2 ansible_host=192.168.88.11
server3 ansible_host=192.168.88.12
Здесь:
-
[servers]- группа серверов; -
server1,server2,server3- имена серверов в Ansible; -
ansible_host- IP-адрес сервера.
Проверить структуру Inventory можно командой:
ansible-inventory -i inventory --graph
Результат:
Группы серверов
Серверы можно разделить по назначению.
Например:
[web]
web1 ansible_host=192.168.88.10
web2 ansible_host=192.168.88.11
[db]
db1 ansible_host=192.168.88.20
db2 ansible_host=192.168.88.21
Теперь у нас есть две группы:
-
web- веб-серверы; -
db- серверы баз данных.
Проверить конкретную группу:
ansible -i inventory web -m ping
Или:
ansible -i inventory db -m ping
Проверить все серверы:
ansible -i inventory all -m ping
Вложенные группы
Группы можно объединять в другие группы.
Например:
[web]
web1 ansible_host=192.168.88.10
web2 ansible_host=192.168.88.11
[db]
db1 ansible_host=192.168.88.20
db2 ansible_host=192.168.88.21
[production:children]
web
db
Группа production включает в себя группы web и db.
Теперь командой:
ansible -i inventory production -m ping
можно проверить все серверы из обеих групп.
Параметры подключения
В Inventory можно указать параметры SSH-подключения.
Например:
[servers]
server1 ansible_host=192.168.88.10 ansible_user=root
server2 ansible_host=192.168.88.11 ansible_user=root
ansible_user определяет пользователя, под которым Ansible подключается к серверу.
Если SSH работает на нестандартном порту:
[servers]
server1 ansible_host=192.168.88.10 ansible_user=root ansible_port=2222
Основные параметры:
-
ansible_host- IP-адрес или имя сервера; -
ansible_user- пользователь для подключения; -
ansible_port- порт SSH; -
ansible_python_interpreter- путь к интерпретатору Python на сервере.
Переменные групп
Если одна и та же переменная используется для нескольких серверов, её можно вынести в group_vars.
Создадим каталог:
mkdir -p group_vars
Для группы web создадим файл:
nano group_vars/web.yml
Содержимое:
---
http_port: 80
server_role: web
Переменные из этого файла будут доступны всем серверам группы web.
Для группы db можно создать отдельный файл:
group_vars/db.yml
---
db_port: 3306
server_role: database
Такой подход позволяет хранить настройки групп отдельно от Inventory.
Переменные отдельных серверов
Если переменная должна применяться только к одному серверу, используется host_vars.
Создадим каталог:
mkdir -p host_vars
Для сервера web1 создадим файл:
nano host_vars/web1.yml
Например:
---
http_port: 8080
Теперь для web1 значение http_port будет равно 8080.
Структура каталога:
/opt/ansible/
├── inventory
├── group_vars/
│ ├── web.yml
│ └── db.yml
└── host_vars/
└── web1.yml
Проверка переменных
Получить информацию о сервере можно командой:
ansible-inventory -i inventory --host web1
Для проверки конкретной переменной можно использовать модуль debug:
ansible -i inventory web1 -m debug -a "var=http_port"
Результат:
Использование групп в Playbook
Группы можно использовать непосредственно в Playbook.
Например:
---
- name: Настройка веб-серверов
hosts: web
tasks:
- name: Установка htop
apt:
name: htop
state: present
Playbook будет выполнен на всех серверах группы web.
Для серверов баз данных:
hosts: db
Для всех серверов:
hosts: all
Выполнение команд по группам
Теперь можно выполнять одну команду сразу на всех серверах группы.
Например, проверить свободное место:
ansible -i inventory web -m shell -a "df -h"
Проверить загрузку серверов:
ansible -i inventory web -m shell -a "uptime"
Проверить состояние MariaDB на серверах группы db:
ansible -i inventory db -m shell -a "systemctl status mariadb"
Полезные команды
Посмотреть структуру Inventory:
ansible-inventory -i inventory --graph
Вывести весь Inventory:
ansible-inventory -i inventory --list
Получить информацию о конкретном сервере:
ansible-inventory -i inventory --host web1
Проверить группу:
ansible -i inventory web -m ping
Проверить все серверы:
ansible -i inventory all -m ping
Заключение
Inventory позволяет организовать серверы в Ansible и разделить их по группам. Для небольшого количества серверов достаточно обычного Inventory. При увеличении инфраструктуры удобно использовать группы, group_vars и host_vars.
В следующей статье перейдём непосредственно к Playbook и разберём, как описывать последовательность действий для автоматической настройки серверов.
Полезные ссылки
- Ansible - Inventory - официальная документация по Inventory, группам и переменным.
- Ansible - Inventory variables - параметры подключения и переменные Inventory.
- Ansible - Group variables - работа с
group_varsиhost_vars. - Ansible с чего начать - Хабр - практическое введение в Ansible с примерами Inventory, групп и переменных.











