Spec-Zone.ru › Ansible 2.10

Введение в плейбуки

Ansible Playbooks предлагают повторяемую, многократно используемую, простую систему управления конфигурацией и развертывания на нескольких машинах, которая хорошо подходит для развертывания сложных приложений. Если вам нужно выполнить задачу с Ansible более одного раза, создайте плейбук и поместите его под контроль системы управления версиями. Затем вы можете использовать плейбук для внедрения новой конфигурации или подтверждения конфигурации удалённых систем. Плейбуки в репозитории ansible-examples иллюстрируют множество полезных техник. Возможно, вам захочется посмотреть их в другом окне во время чтения документации.

Плейбуки могут:

  • определять конфигурации
  • организовывать шаги любого ручного упорядоченного процесса на нескольких группах машин в определенном порядке
  • запускать задачи синхронно или асинхронно
  • Синтаксис плейбука
  • Выполнение плейбука

    • Выполнение задачи
    • Желаемое состояние и идемпотентность
    • Запуск плейбуков
  • Ansible-Pull
  • Проверка плейбуков

    • ansible-lint

Синтаксис плейбука

Плейбуки выражаются в формате YAML с минимальным синтаксисом. Если вы не знакомы с YAML, ознакомьтесь с нашим обзором Синтаксиса YAML и рассмотрите возможность установки дополнения для вашего текстового редактора (см. Другие инструменты и программы), чтобы помочь вам писать чистый синтаксис YAML в ваших плейбуках.

Плейбук состоит из одного или нескольких «плей» в упорядоченном списке. Термины «плейбук» и «плей» — это спортивные аналогии. Каждый плей выполняет часть общей цели плейбука, выполняя одну или несколько задач. Каждая задача вызывает модуль Ansible.

Выполнение плейбука

Плейбук выполняется в порядке сверху вниз. Внутри каждого плей задачи также выполняются сверху вниз. Плейбуки с несколькими «плей» могут организовывать развертывания на нескольких машинах, выполняя один плей на веб-серверах, затем другой плей на серверах базы данных, затем третий плей на вашей сетевой инфраструктуре и так далее. Как минимум, каждый плей определяет две вещи:

  • управляемые узлы в качестве цели, используя шаблон
  • по крайней мере одну задачу для выполнения

В этом примере первый плей нацелен на веб-серверы; второй плей нацелен на серверы базы данных:

---
- name: update web servers
  hosts: webservers
  remote_user: root

  tasks:
  - name: ensure apache is at the latest version
    yum:
      name: httpd
      state: latest
  - name: write the apache config file
    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
    yum:
      name: postgresql
      state: latest
  - name: ensure that postgresql is started
    service:
      name: postgresql
      state: started

Ваш плейбук может содержать больше, чем просто строку hosts и задачи. Например, плейбук выше устанавливает remote_user для каждого плей. Это пользовательская учетная запись для подключения SSH. Вы можете добавить другие Ключевые слова плейбука на уровне плейбука, плей или задачи, чтобы повлиять на поведение Ansible. Ключевые слова плейбука могут управлять плагином соединения, использовать ли эскалацию привилегий, как обрабатывать ошибки и многое другое. Для поддержки различных сред Ansible позволяет устанавливать многие из этих параметров в качестве флагов командной строки, в вашей конфигурации Ansible или в вашем инвентаре. Изучение правил приоритета для этих источников данных поможет вам расширить свою экосистему Ansible.

Выполнение задачи

По умолчанию Ansible выполняет каждую задачу в порядке, по одной за раз, на всех машинах, соответствующих шаблону узла. Каждая задача выполняет модуль со специфическими аргументами. После того, как задача выполнена на всех целевых машинах, Ansible переходит к следующей задаче. Вы можете использовать стратегии, чтобы изменить это поведение по умолчанию. В рамках каждого плей Ansible применяет те же директивы задачи ко всем узлам. Если задача завершается ошибкой на узле, Ansible исключает этот узел из цикла для остальной части плейбука.

При запуске плейбука Ansible возвращает информацию о подключениях, name строки всех ваших плей и задач, успешность или неудачу выполнения каждой задачи на каждой машине, а также внес ли каждая задача изменения на каждой машине. В конце выполнения плейбука Ansible предоставляет сводку по узлам, которые были выбраны в качестве цели и как они себя вели. Общие ошибки и фатальные попытки связи с недоступными узлами хранятся отдельно в подсчётах.

Желаемое состояние и ‘идемпотентность’

Большинство модулей Ansible проверяют, достигнуто ли желаемое конечное состояние, и завершаются без выполнения каких-либо действий, если это состояние уже достигнуто, чтобы повторное выполнение задачи не изменяло конечное состояние. Модули, которые так ведут себя, часто называются «идемпотентными». Независимо от того, запускаете ли вы плейбук один раз или несколько раз, результат должен быть одинаковым. Однако не все плейбуки и не все модули так ведут себя. Если вы не уверены, протестируйте свои плейбуки в среде песочницы, прежде чем запускать их несколько раз в рабочей среде.

Запуск плейбуков

Для запуска плейбука используйте команду ansible-playbook:

ansible-playbook playbook.yml -f 10

Используйте флаг --verbose при запуске плейбука, чтобы увидеть подробные результаты успешных и неуспешных модулей.

Ansible-Pull

Если вы хотите изменить архитектуру Ansible, чтобы узлы проверялись в централизованном месте, а не чтобы конфигурация рассылалась на них, вы можете это сделать.

ansible-pull — это небольшой скрипт, который выгрузит репозиторий инструкций по конфигурации из git и затем выполнит ansible-playbook с этим содержанием.

Предполагая, что вы настраиваете балансировку загрузки на месте выгрузки, ansible-pull масштабируется практически бесконечно.

Запустите ansible-pull --help для получения подробностей.

Также есть умный плейбук для настройки ansible-pull через crontab из режима отправки.

Проверка плейбуков

Вы можете проверить свои плейбуки, чтобы обнаружить синтаксические ошибки и другие проблемы до их запуска. Команда ansible-playbook предлагает несколько вариантов проверки, включая --check, --diff, --list-hosts, list-tasks, и --syntax-check. Инструменты для проверки плейбуков описывает другие инструменты для проверки и тестирования плейбуков.

ansible-lint

Для получения подробных комментариев, специфичных для Ansible, по вашим плейбукам перед их выполнением можно использовать ansible-lint. Например, если вы запустите 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 описывает каждую ошибку. Для [403], рекомендуемое исправление — изменить state: latest на state: present в плейбуке.

См. также

ansible-lint

Узнайте, как проверить синтаксис Ansible Playbooks

Синтаксис YAML

Узнайте о синтаксисе YAML

Советы и хитрости

Советы по управлению плейбуками в реальном мире

Индекс коллекций

Просмотрите существующие коллекции, модули и плагины

Разработать модуль?

Узнайте, как расширить Ansible, написав собственные модули

Шаблоны: выбор узлов и групп

Узнайте, как выбирать узлы

Директория примеров GitHub

Полные примеры плейбуков «от начала до конца»

Список рассылки

Вопросы? Помощь? Идеи? Заходите на список Google Groups

© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/user_guide/playbooks_intro.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API