Planetahost VPS
Перейти к основному контенту

Ansible #2: Inventory и группы серверов

intro-Ansible-2-Inventory-and-Server-Groups-planetahost.png

Подробности урока
Уровень сложности Лёгкий
Права 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

изображение.png

Здесь:

  • [servers] - группа серверов;

  • server1, server2, server3 - имена серверов в Ansible;

  • ansible_host - IP-адрес сервера.

Проверить структуру Inventory можно командой:

ansible-inventory -i inventory --graph

Результат:

изображение.png

Группы серверов

Серверы можно разделить по назначению.

Например:

[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

изображение.png

Теперь у нас есть две группы:

  • web - веб-серверы;

  • db - серверы баз данных.

Проверить конкретную группу:

ansible -i inventory web -m ping

Или:

ansible -i inventory db -m ping

Проверить все серверы:

ansible -i inventory all -m ping

изображение.png

Лаборатория Ansible
Несколько серверов для практики
Ansible особенно интересно изучать, когда под управлением находится не один сервер, а небольшая инфраструктура. Несколько недорогих VDS можно использовать для создания собственной лаборатории: например, выделить отдельные серверы под Web, DB и другие группы.
Собрать свою VDS-лабораторию →

Вложенные группы

Группы можно объединять в другие группы.

Например:

[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.

изображение.png

Теперь командой:

ansible -i inventory production -m ping

можно проверить все серверы из обеих групп.

изображение.png

Параметры подключения

В 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

изображение.png

Такой подход позволяет хранить настройки групп отдельно от 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

изображение.png

Для проверки конкретной переменной можно использовать модуль debug:

ansible -i inventory web1 -m debug -a "var=http_port"

Результат:

изображение.png

Использование групп в Playbook

Группы можно использовать непосредственно в Playbook.

Например:

---
- name: Настройка веб-серверов
  hosts: web

  tasks:
    - name: Установка htop
      apt:
        name: htop
        state: present

Playbook будет выполнен на всех серверах группы web.

изображение.png

Для серверов баз данных:

hosts: db

Для всех серверов:

hosts: all

Выполнение команд по группам

Теперь можно выполнять одну команду сразу на всех серверах группы.

Например, проверить свободное место:

ansible -i inventory web -m shell -a "df -h"

Проверить загрузку серверов:

ansible -i inventory web -m shell -a "uptime"

изображение.png

Проверить состояние 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 и разберём, как описывать последовательность действий для автоматической настройки серверов.

Полезные ссылки