Site icon 8HOST.COM

Как написать и запустить плейбук Ansible

Ansible – это современный инструмент управления конфигурацией. Для связи и выполнения команд на управляемых серверах (нодах) он использует только SSH и Python – то есть вам не нужно устанавливать агентское программное обеспечение на удаленные ноды. В этой серии мануалов вы познакомитесь с основными функциями Ansible, которые можно использовать для написания сценариев автоматизации серверов. В конце серии вы найдете практический пример плейбука для автоматизации настройки удаленного веб-сервера Nginx и развертывания на нем статического HTML-сайта.

Примечание: Это первая часть серии по работе с Ansible. Другие мануалы из этой серии вы найдете по тегу ansible-practice. Весь код можно найти в этом репозитории.

Ansible позволяет управлять серверами двумя способами: с помощью специальных команд и с помощью плейбуков. Плейбуки (playbooks) – это сценарии Ansible, которые используют формат YAML для определения одного или нескольких плеев. Плей – это упорядоченный набор задач, которые организованы таким образом, чтобы автоматизировать пошаговый процесс (к примеру, это может быть настройка веб-сервера или развертывание приложения в производственной среде). Плейбуки 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 в других мануалах данной серии.