Как написать и запустить плейбук Ansible
Development, VPS | Комментировать запись
Ansible – это современный инструмент управления конфигурацией. Для связи и выполнения команд на управляемых серверах (нодах) он использует только SSH и Python – то есть вам не нужно устанавливать агентское программное обеспечение на удаленные ноды. В этой серии мануалов вы познакомитесь с основными функциями Ansible, которые можно использовать для написания сценариев автоматизации серверов. В конце серии вы найдете практический пример плейбука для автоматизации настройки удаленного веб-сервера Nginx и развертывания на нем статического HTML-сайта.
Примечание: Это первая часть серии по работе с Ansible. Другие мануалы из этой серии вы найдете по тегу ansible-practice. Весь код можно найти в этом репозитории.
Ansible позволяет управлять серверами двумя способами: с помощью специальных команд и с помощью плейбуков. Плейбуки (playbooks) – это сценарии Ansible, которые используют формат YAML для определения одного или нескольких плеев. Плей – это упорядоченный набор задач, которые организованы таким образом, чтобы автоматизировать пошаговый процесс (к примеру, это может быть настройка веб-сервера или развертывание приложения в производственной среде). Плейбуки Ansible позволяют полностью автоматизировать настройку сервера и развертывание приложений, имеют доступный синтаксис и предоставляют обширную библиотеку встроенных ресурсов.
Требования
- Главная нода Ansible: это машина, с помощью которой мы будем подключаться к удаленным нодам кластера по SSH и управлять их конфигурацией. Главной нодой может быть ваша локальная машина или отдельный сервер, выделенный под работу Ansible. В данной серии мы используем в качестве главной ноды машину Ubuntu 20.04. На этой ноде должен быть пользователь с привилегиями sudo (обратитесь к мануалу по начальной настройке сервера). Имейте в виду: если вы используете удаленный сервер в качестве главной ноды, вам нужен брандмауэр (инструкции по его настройке также есть в вышеупомянутом мануале).
- Ключи SSH, связанные с пользователем sudo. Обратитесь к мануалу Установка SSH-ключей в Ubuntu 20.04.
- Один или несколько хостов Ansible: хост в Ansible – это любая машина, автоматизация которой происходит через главную ноду Ansible. В этом руководстве хосты Ansible являются удаленными серверами Ubuntu 20.04. Обязательно добавьте открытый SSH ключ главной ноды в authorized_keys системного пользователя на каждом хосте Ansible. Этот может быть либо пользователь root, либо обычный пользователь с привилегиями sudo. За инструкциями можно обратиться к разделу 2 мануала Установка SSH-ключей в Ubuntu 20.04.
- Настроенный экземпляр Ansible на главной ноде. Чтобы настроить Ansible, следуйте руководству Установка и настройка Ansible в Ubuntu 20.04.
- Рабочий файл инвентаря Ansible. Этот файл должен находиться на главной ноде и содержать все ваши хосты Ansible. В руководстве Создание файла инвентаря Ansible подробно объясняется, как создать такой файл.
Выполнив эти предварительные требования, проверьте подключение, как описано в руководстве Управление несколькими серверами при помощи команд Ansible, чтобы убедиться, что вы можете подключаться к удаленным хостам.
Создание плейбука
Как мы говорили выше, плейбуки состоят из упорядоченных плеев.
Плей определяется как список YAML. Обычно плей начинается с определения целевых хостов, которым нужна данная конкретная настройка. Это определяется с помощью директивы hosts.
Часто директиве hosts присваивается значение all, потому что в Ansible вы можете ограничить цели плея во время выполнения, запустив команду ansible-playbook с параметром -l. Такой подход позволяет запускать один и тот же плейбук на разных серверах или в разных группах – при этом без необходимости каждый раз переписывать сам плейбук.
Начнем с создания нового каталога в домашнем каталоге, где мы сможем хранить плейбуки. Во-первых, убедитесь, что вы находитесь в домашнем каталоге вашего системного пользователя. Затем создайте каталог ansible-practice и перейдите в этот каталог с помощью команды cd:
cd ~
mkdir ansible-practice
cd ansible-practice
Если вы выполнили все предварительные требования, у вас уже должен быть готовый рабочий файл инвентаря. Теперь вы можете скопировать этот файл в свой новый каталог ansible-practice. Допустим, если вы создали свой тестовый файл инвентаря в каталоге ansible в своей домашней папке, вы можете скопировать файл в новый каталог с помощью такой команды:
cp ~/ansible/inventory ~/ansible-practice/inventory
Затем создайте новый плейбук:
nano playbook-01.yml
Следующий плейбук определяет плей, нацеленный на все хосты из данного инвентаря. Он содержит единственную задачу – вывести на экран отладочное сообщение.
Примечание: Больше о задачах мы расскажем в следующей части этой серии.
Добавьте в файл playbook-01.yml следующие строки:
--- - hosts: all tasks: - name: Print message debug: msg: Hello Ansible World
Сохраните и закройте файл. Если вы используете nano, вы можете нажать Ctrl+X, затем Y и Enter для подтверждения.
Чтобы проверить этот playbook на сервере (или серверах), который вы настроили в своем файле инвентаря, запустите команду ansible-playbook с теми же аргументами подключения, которые вы использовали при запуске теста в самом начале мануала. Здесь мы используем файл инвентаря по имени inventory и пользователя 8host для подключения к удаленному серверу (но не забудьте изменить эти данные, чтобы они соответствовали вашим данным):
ansible-playbook -i inventory playbook-01.yml -u 8host
Вы увидите такой результат:
PLAY [all] *********************************************************************************** TASK [Gathering Facts] *********************************************************************** ok: [203.0.113.10] TASK [Update apt cache] ********************************************************************** ok: [203.0.113.10] => { "msg": "Hello Ansible World" } PLAY RECAP *********************************************************************************** 203.0.113.10 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Как видите, в выходных данных перечислены две задачи, хотя вы определили в плейбуке только одну. В начале каждого плейбука Ansible по умолчанию выполняет дополнительную задачу, которая собирает информацию – так называемые факты – об удаленных нодах. Поскольку факты помогают плейбукам лучше настроить поведение задач, сбор этих данных должен выполняться до того, как Ansible начнет выполнять любые другие задачи.
Мы еще поговорим о фактах Ansible в других мануалах данной серии.
Tags: Ansible, ansible-practice