Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Файл инвентаризации Основы автоматизации в Ansible

Вспомним команду:

ansible all -i inventory.ini -u root -m ping

all — зарезервированное ключевое слово в Ansible. Оно обозначает, что команду нужно выполнить для всех серверов, указанных в inventory-файле. Такой способ хорошо работает, когда сервера имеют одинаковую роль, например на них разворачивается код приложения и они обрабатывают входящие запросы. В более сложных ситуациях, сервера выполняют разные роли, где-то запущена база данных, где-то раздается статика (картинки, шрифты и т.п.), где-то выполняются тяжелые асинхронные обработчики. И для такой инфраструктуры требуется разделение из-за различий в настройке. В одном месте нужна база данных, в другом нет. Для решения этой задачи Ansible вводит понятие групп серверов. Пример inventory-файла с двумя группами:

# Имена групп выбраны произвольно
# Количество серверов в группе может быть любым
[webservers]
ec2-3-17-186-111.us-east-2.compute.amazonaws.com
ec2-3-20-186-111.us-east-2.compute.amazonaws.com

[appservers]
157.230.82.133

Выполним команду на одной из наших групп:

ansible appservers -i inventory.ini -a 'uptime'

# Группа appservers состоит из одного сервера
157.230.82.133 | CHANGED | rc=0 >>
 06:12:48 up 11 days, 21:53,  1 user,  load average: 0.04, 0.04, 0.01

А при указании группы webservers, команда uptime будет выполнена на двух серверах

ansible webservers -i inventory.ini -a 'uptime'

ec2-3-17-186-111.us-east-2.compute.amazonaws.com | CHANGED | rc=0 >>
 06:12:48 up 11 days, 21:53,  1 user,  load average: 0.04, 0.04, 0.01
ec2-3-20-186-111.us-east-2.compute.amazonaws.com | CHANGED | rc=0 >>
 06:12:48 up 11 days, 21:53,  1 user,  load average: 0.04, 0.04, 0.01

Настройки серверов

По умолчанию ssh находится на 22 порту, но иногда его меняют в целях безопасности. Тогда его нужно явно прописать:

[webservers]
ec2-52-17-124-244.eu-west:8081

Если у сервера есть IP, но нет доменного имени, его можно задать с помощью специального параметра ansible_host:

# Выбираем удобное имя
jumper ansible_host=123.25.26.35

Такое имя можно использовать в командах Ansible. Это позволит, например, с помощью специального флага --limit выполнять запросы на конкретном сервере:

ansible all --limit jumper -i inventory.ini -m ping

В файле инвентаризации можно настроить различные группировки. Сейчас у нас есть группы [webservers] и [appservers]. Они запускаются и стартуют по-разному, но мы можем объединить их в общую группу с помощью опции children. Пример такого объединения под общим именем servers:

[servers:children]
webservers
appservers

[webservers]
ec2-52-17-124-244.eu-west:8081

[appservers]
ec2-52-17-124-245.eu-west

Это позволит выполнять запросы сразу к двум группам серверов:

ansible servers -i inventory.ini -m ping

Ansible позволяет работать и на текущем компьютере пользователя. Для локального соединения создаётся отдельная запись localhost с указанием того, что это локальная машина. Тогда Ansible пропускает соединение по ssh и выполняет команды напрямую:

localhost ansible_connection=local

localhost не входит ни в какую группу, поэтому для выполнения команды понадобится опция --limit, которая ограничивает запуск конкретной машиной:

ansible all --limit localhost -i inventory.ini -u root -m ping

Самостоятельная работа

  1. Создайте еще один сервер на DO
  2. Добавьте каждый созданный сервер в группу webservers. Добавьте каждому серверу алиас (имя) по которому можно к нему обращаться
  3. Выполните команду ping к каждому серверу по отдельности
  4. Выполните команду ping ко всем серверам
  5. Создайте еще один инвентори файл. Добавьте в него локальную машину и выполните команду ping с новым инвентори файлом
  6. Залейте изменения на Github

Дополнительные материалы

  1. Файл инвентаризации / Документация Ansible

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»