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

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: ,

Добавить комментарий