Стадия жизненного цикла модуля: Experimental
У модуля есть требования для установки
На этой странице приведены готовые сценарии работы с модулем ansible. Сценарии не зависят друг от друга, и каждый из них содержит манифест, а также описание того, что появляется в статусе задания после его выполнения. Полное описание полей задания приведено в руководстве пользователя.
Перед началом работы
Все примеры рассчитаны на неймспейс dvp-examples, виртуальную машину с лейблом role: example и Secret с учётными данными SSH. Подготовьте эти объекты перед выполнением примеров.
Проверка связи встроенным плейбуком
Простейший сценарий состоит из одной машины, выбранной по лейблу, и плейбука с одной задачей. С него рекомендуется начинать работу с модулем, поскольку он проверяет весь путь от создания задания до записи результата в статус.
Плейбук из ConfigMap
Плейбук длиннее нескольких десятков строк или используемый несколькими заданиями следует размещать в ресурсе ConfigMap. В этом случае задание ссылается на ключ такого ресурса и не хранит текст плейбука в себе.
Выбор нескольких целей
Цели задания задаются либо выражением над лейблами, либо перечислением имён. Одновременно использовать оба способа нельзя, а манифест с пустым селектором API-сервер отклоняет. Задание выполняется однократно, поэтому цели требуется задавать явно.
Отладка задания
Блок runner изменяет режим запуска утилиты ansible-playbook, не влияя на состав задач. Параметр diff показывает, что именно изменилось в файлах, параметр verbosity задаёт подробность лога, а параметр dryRun выполняет проверочный запуск без изменений на хостах.
Группы и переменные хоста в аннотациях
Группы Ansible и факты о машине задаются на самой машине двумя аннотациями, которые контроллер переносит в файл инвентаря. Благодаря этому плейбук получает группу web и переменную app_role независимо от конкретного задания.
Установка пакета с повышением привилегий
Задачам, которые изменяют систему, требуется параметр become: true. Пароль для повышения привилегий контроллер берёт из ключа become-password в Secret подключения. Пакетный менеджер выбирается по фактам, собранным Ansible.
Идемпотентная настройка сервиса
Настройка сервиса состоит из шаблона конфигурации и обработчика, который перезапускает сервис только при изменении файла. Повторный запуск такого задания не изменяет конфигурацию и не перезапускает сервис.
Сбор фактов о машинах
Для инвентаризации и планирования ёмкости используется плейбук, который ничего не изменяет, а только собирает факты и выводит их. Результат остаётся в логах пода раннера, поэтому его следует собирать в хранилище логов.
Пропущенные машины в статусе
Машина, которая подошла под выбор, но не может быть настроена в момент запуска задания, не приводит к ошибке. Такая машина попадает в список status.skippedHosts с указанием причины, а плейбук выполняется на остальных машинах.
Зашифрованные значения Ansible Vault
Проект с файлами, зашифрованными Ansible Vault, выполняется без изменений. Пароль хранится в Secret подключения в ключе ansible-vault-password, а задание передаёт его утилите ansible-playbook как файл пароля.
Плейбук-проект из публичного Git-репозитория
Реальный проект Ansible представляет собой дерево каталогов с roles/, group_vars/ и шаблонами. Источник Git загружает репозиторий целиком, поэтому роли и файлы рядом с плейбуком выполняются без изменений, а объявленные зависимости Galaxy устанавливаются до запуска плейбука.
Приватный Git-репозиторий
Учётные данные репозитория хранятся в отдельном Secret и монтируются только на шаг загрузки, поэтому задачи плейбука их не видят. Для адресов вида ssh:// такой Secret является обязательным, а ключи хоста проверяются строго.
Задание в дополнительной сети
Если служба SSH в гостевой ОС слушает только в дополнительной сети модуля sdn, одного адреса машины для подключения недостаточно, поскольку маршрута из сети подов в другой L2-домен нет. Поле connection.network помещает в эту сеть и само задание.
Диагностика неуспешного задания
Задания, завершившиеся с ошибкой, делятся на два вида, которые разбираются по-разному. Фаза PlaybookFailed означает, что плейбук выполнялся и его задачи завершились с ошибкой, а фаза Error означает, что выполнение не дошло до задач. Ошибки, которые плейбук обработал самостоятельно, оставляют задание успешным.
Запуск по расписанию
Расписание создаёт задания по cron так же, как ресурс CronJob создаёт объекты Job. Имя задания складывается из имени расписания и времени тика.
Одновременные задания и история расписания
Четыре поля расписания определяют, что делать, если задание не завершилось до следующего тика, насколько поздно пропущенный тик ещё имеет смысл выполнять и сколько заданий оставлять в неймспейсе.
Хосты, заданные адресом
Адреса некоторых хостов платформе неизвестны. К таким хостам относятся машины с адресом, настроенным вручную внутри гостевой ОС или полученным от внешнего DHCP-сервера, а также физические серверы и сетевые устройства. Такие хосты задаются адресом в манифесте задания.
Цели типа Hosts доступны только в коммерческих редакциях. В Community Edition задание работает с виртуальными машинами платформы, а манифест с целями типа Hosts кластер отклоняет при создании.
Переменные задания
Переменные передают плейбуку значения и позволяют не изменять сам плейбук, поэтому один проект обслуживает несколько окружений. Значение указывается непосредственно в манифесте строкой, числом, списком или отображением.
Значения из Secret и ConfigMap
Пароль или готовый набор значений не требуется переносить в манифест задания. Поле valueFrom берёт значение из ключа Secret или ConfigMap, а поле varsFiles подключает целый YAML-документ с сохранением типов значений.
Приоритет переменных
Одно имя переменной может быть задано в четырёх местах: в аннотации машины, в плейбуке, в файле varsFiles и в поле vars задания. Переменные задания имеют приоритет над всеми значениями, которые задают плейбук и его проект.
Запрещённые имена переменных
Часть имён переменных задание не принимает. К таким именам относятся имена, которые модуль устанавливает самостоятельно, и magic-переменные Ansible. Для первых в API уже предусмотрены отдельные поля, а значения вторых Ansible заполняет сам.