Плейбуки Ansible
Плейбуки Ansible предоставляют повторно используемую и простую систему управления конфигурацией и развертывания на нескольких машинах, которая хорошо подходит для развертывания сложных приложений. Если вам нужно выполнить задачу с помощью Ansible больше одного раза, вы можете написать плейбук и поместить его под контроль версий. Затем вы сможете использовать плейбук, чтобы применить новые конфигурации или проверить конфигурацию удаленных систем.
Плейбуки позволяют выполнять следующие действия:
- Объявлять конфигурации.
- Оркестрировать этапы любого упорядоченного вручную процесса на нескольких группах машин в заданной последовательности.
- Запускать задачи синхронно или асинхронно.
Синтаксис плейбуков
Плейбуки записываются в формате YAML с минимальным количеством синтаксических конструкций. Если вы не знакомы с YAML, ознакомьтесь с обзором синтаксиса YAML и установите дополнение для текстового редактора (см. раздел Другие инструменты и программы), которое поможет вам писать корректный синтаксис YAML в плейбуках.
Плейбук состоит из одного или нескольких «плеев», перечисленных в заданном порядке. Термины «плейбук» и «плей» заимствованы из спортивной терминологии. Каждый плей выполняет часть общей задачи плейбука, запуская одну или несколько задач. Каждая задача вызывает модуль Ansible.
Выполнение плейбуков
Плейбук выполняется последовательно, сверху вниз. В каждом плей задачи также выполняются по порядку, сверху вниз. Плейбуки с несколькими плеями могут оркестрировать развертывание на нескольких машинах: один плей запускается на веб-серверах, другой — на серверах баз данных, а третий — в сетевой инфраструктуре. Как минимум каждый плей определяет два параметра:
- Управляемые узлы, для которых он предназначен, с помощью шаблона.
- Как минимум одну задачу для выполнения.
В Ansible 2.10 и более поздних версиях в плейбуках следует использовать полное имя коллекции (FQCN). Использование FQCN гарантирует, что вы выбрали нужный модуль, поскольку разные коллекции могут содержать модули с одинаковыми именами. Например, user. См. раздел Использование коллекций в плейбуке.
В следующем примере первый плей предназначен для веб-серверов, а второй — для серверов баз данных.
---
- name: Update web servers
hosts: webservers
remote_user: root
tasks:
- name: Ensure apache is at the latest version
ansible.builtin.yum:
name: httpd
state: latest
- name: Write the apache config file
ansible.builtin.template:
src: /srv/httpd.j2
dest: /etc/httpd.conf
- name: Update db servers
hosts: databases
remote_user: root
tasks:
- name: Ensure postgresql is at the latest version
ansible.builtin.yum:
name: postgresql
state: latest
- name: Ensure that postgresql is started
ansible.builtin.service:
name: postgresql
state: started
Плейбук может содержать не только строку hosts и задачи. Например, в плейбуке выше для каждого плей задан remote_user. remote_user — это учетная запись пользователя для SSH-подключения. На уровне плейбука, плейа или задачи можно добавить другие ключевые слова плейбука, чтобы изменить поведение Ansible. Ключевые слова плейбука позволяют управлять плагином подключения, определять, использовать ли повышение привилегий, задавать обработку ошибок и многое другое. Для поддержки различных сред многие из этих параметров можно задать с помощью флагов командной строки в конфигурации Ansible или в инвентаре. Знание правил приоритета для этих источников данных поможет вам по мере расширения экосистемы Ansible.
Выполнение задач
По умолчанию Ansible выполняет каждую задачу по порядку, одну за другой, на всех машинах, соответствующих шаблону узлов. Каждая задача выполняет модуль с определенными аргументами. После выполнения задачи на всех целевых машинах Ansible переходит к следующей задаче. Чтобы изменить такое поведение по умолчанию, можно использовать стратегии. В каждом плейе Ansible применяет одинаковые директивы задач ко всем узлам. Если задача завершается с ошибкой на узле, Ansible исключает этот узел из выполнения до конца плейбука.
При запуске плейбука Ansible возвращает сведения о подключениях, строках name всех плей и задач, успешном или неудачном выполнении каждой задачи на каждой машине, а также об изменениях, внесенных каждой задачей на каждой машине. В конце выполнения плейбука Ansible выводит сводку по целевым узлам и результатам их обработки. Общие ошибки и критические сбои связи «узел недоступен» учитываются отдельно.
Желаемое состояние и идемпотентность
Большинство модулей Ansible проверяют, достигнуто ли уже требуемое конечное состояние, и завершают работу, не выполняя никаких действий, если оно достигнуто. Повторный запуск задачи не меняет конечное состояние. Модули, работающие таким образом, называются «идемпотентными». Независимо от того, запускаете ли вы плейбук один раз или несколько, результат должен быть одинаковым. Однако не все плейбуки и модули работают таким образом. Если вы не уверены, протестируйте плейбуки в изолированной среде, прежде чем запускать их несколько раз в рабочей среде.
Запуск плейбуков
Чтобы запустить плейбук, используйте команду ansible-playbook.
ansible-playbook playbook.yml -f 10
При запуске плейбука используйте флаг --verbose, чтобы просмотреть подробные сведения об успешно и неуспешно выполненных задачах.
Запуск плейбуков в режиме проверки
Режим проверки Ansible позволяет выполнить плейбук, не внося никаких изменений в ваши системы. С его помощью можно протестировать плейбуки до их внедрения в рабочей среде.
Чтобы запустить плейбук в режиме проверки, передайте флаг -C или --check команде ansible-playbook:
ansible-playbook --check playbook.yaml
Эта команда запускает плейбук в обычном режиме. Вместо внесения изменений Ansible формирует отчет о том, какие изменения были бы выполнены. В этом отчете приводятся такие сведения, как изменения файлов, выполнение команд и вызовы модулей.
Режим проверки — это безопасный и практичный способ изучить работу плейбуков, не рискуя внести непреднамеренные изменения в системы. Этот режим также полезен для устранения неполадок в плейбуках, работающих не так, как ожидалось.
Ansible-Pull
Можно изменить архитектуру Ansible так, чтобы узлы сами подключались к центральному узлу, вместо того чтобы вы отправляли им конфигурацию.
Команда ansible-pull — это небольшой скрипт, который получает из git репозиторий с инструкциями по конфигурации, а затем запускает ansible-playbook для его содержимого.
Если распределить нагрузку между серверами, на которых размещены репозитории, ansible-pull сможет масштабироваться без ограничений.
Подробности см. в разделе ansible-pull --help.
Проверка плейбуков
Чтобы выявить синтаксические ошибки и другие проблемы до запуска плейбуков, их можно проверить. Команда ansible-playbook предлагает несколько вариантов проверки, включая --check, --diff, --list-hosts, --list-tasks и --syntax-check. В разделе Инструменты для проверки плейбуков описаны другие инструменты для проверки и тестирования плейбуков.
ansible-lint
Перед выполнением плейбуков можно использовать ansible-lint, чтобы получить подробные отзывы о них с учетом особенностей Ansible. Например, если запустить ansible-lint для плейбука с именем verify-apache.yml, приведенного выше на этой странице, должны появиться следующие результаты:
$ ansible-lint verify-apache.yml [403] Package installs should not use latest verify-apache.yml:8 Task/Handler: ensure apache is at the latest version
На странице Правила ansible-lint по умолчанию описана каждая ошибка.
См. также
- ansible-lint
-
Узнайте, как проверять синтаксис плейбуков Ansible
- Синтаксис YAML
-
Узнайте о синтаксисе YAML
- Общие советы
-
Советы по управлению плейбуками в реальных условиях
- Указатель коллекций
-
Просмотр существующих коллекций, модулей и плагинов
- Стоит ли разрабатывать модуль?
-
Узнайте, как расширить Ansible, написав собственные модули
- Шаблоны: выбор узлов и групп
-
Узнайте, как выбирать узлы
- Общение
-
Есть вопросы? Нужна помощь? Хотите поделиться идеями? Посетите руководство по общению сообщества Ansible
© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/playbook_guide/playbooks_intro.html