ansible-navigator: запуск плейбуков в Execution Environment

Рейтинг: 62.1% · 15 голосов
Подробный курс по Ansible с прицелом на экзамен RHCE EX294: установка и инвентарь, плейбуки, переменные и факты, Vault, циклы и условия, шаблоны Jinja2, роли и коллекции, Execution Environments и ansible-navigator, управление системами (диски, LVM, cron, SELinux, firewalld). Примеры на RHEL/Fedora. Актуально на 2026.
Ответить
Аватара пользователя
Maksim_DevOps
Сообщения: 47
Зарегистрирован: 11 май 2026, 05:31

ansible-navigator: запуск плейбуков в Execution Environment

Сообщение Maksim_DevOps »

Оглавление курса (47)
  1. Что такое Ansible и зачем он нужен: автоматизация без агентов
  2. Сертификация RHCE и экзамен EX294: что внутри и как готовиться
  3. Архитектура Ansible: control node, узлы, модули и плагины
  4. Установка Ansible на control node: dnf, pip и версии ansible-core
  5. Подготовка управляемых узлов: SSH, пользователь и sudo
  6. Инвентарь Ansible: hosts, группы и переменные
  7. Настройка Ansible: файл ansible.cfg и приоритеты конфигурации
  8. Host patterns и инструменты командной строки Ansible
  9. Ad hoc команды Ansible: быстрые задачи без плейбука
  10. Ansible playbook: что это такое и как устроен
  11. Структура плейбука: play, task, модули и переменные
  12. Запуск плейбуков: проверка, теги, ограничения и отладка
  13. Параллелизм и порядок выполнения: forks, serial, strategy
  14. Факты Ansible: сбор информации об узлах
  15. Переменные Ansible: типы, объявление и приоритет
  16. Регистрация результатов и специальные переменные
  17. Ansible Vault: шифрование паролей и секретов
  18. Организация инвентаря: group_vars, host_vars и вложенные группы
  19. Динамический инвентарь и инвентарные плагины
  20. Циклы в Ansible: loop, списки и словари
  21. Повтор задачи до условия: until, retries и delay
  22. Условия в Ansible: директива when и логика
  23. Jinja2 в Ansible: выражения, фильтры и подстановки
  24. Обработчики Ansible: handlers, notify и flush_handlers
  25. Обработка ошибок: failed_when, changed_when и ignore_errors
  26. Блоки в Ansible: block, rescue и always
  27. Управление файлами: модули file, copy, fetch и stat
  28. Архивы и сборка файлов: archive, unarchive, assemble
  29. Точечное редактирование файлов: lineinfile и blockinfile
  30. Шаблоны Jinja2: модуль template и динамические конфиги
  31. Jinja2 продвинуто: фильтры, циклы, макросы и lookup
  32. Модули Ansible: ansible-doc и поиск нужного модуля
  33. Разработка собственного модуля Ansible на Python
  34. Роли Ansible и Ansible Galaxy: переиспользование
  35. Разработка роли Ansible: создание с нуля
  36. Зависимости ролей и requirements.yml
  37. Коллекции Ansible: ansible.posix, community и своя коллекция
  38. Execution Environments: контейнеры для запуска Ansible
  39. Сборка Execution Environment с ansible-builder
  40. ansible-navigator: запуск плейбуков в Execution Environment (вы здесь)
  41. Управление SSH-ключами через Ansible: authorized_key
  42. Управление дисками: filesystem, mount и parted
  43. LVM через Ansible: тома, группы и расширение
  44. Планировщик задач: cron и systemd timers через Ansible
  45. Безопасность: hardening SSH и репозитории dnf/yum
  46. SELinux через Ansible: булевы, контексты и порты
  47. Сквозной проект и подготовка к экзамену EX294
Знакомая боль: плейбук отлично работает у тебя на ноутбуке, а на машине коллеги падает с "module not found" или ругается на версию Python. Кто-то поставил community.general из galaxy, кто-то нет; у одного ansible-core 2.15, у другого системный 2.9 из старого пакета. Воспроизводимость нулевая, а на новом RHCE как раз проверяют, что ты умеешь запускать автоматизацию предсказуемо. Решение, на которое Red Hat сделал ставку - это ansible navigator плюс Execution Environment (EE): контейнер с зафиксированным ansible-core, нужными коллекциями и зависимостями. Запускаешь плейбук не "как получится", а внутри одного и того же образа на любой машине.

Что такое automation content navigator и зачем он пришёл на смену ansible-playbook

ansible-navigator (полное имя - automation content navigator) - это новый интерфейс запуска контента Ansible. По сути обёртка, которая берёт твой плейбук, инвентарь и коллекции и прогоняет их не на голой системе, а внутри контейнерного образа EE через podman или docker. Тот же самый образ, что крутится в AWX и Ansible Automation Platform, ты гоняешь локально - поведение совпадает с прода один в один.

Чем это отличается от привычного ansible-playbook:
  • ansible-playbook запускает задачи прямо в текущем окружении хоста - какой ansible-core стоит, такой и работает.
  • ansible-navigator по умолчанию заворачивает выполнение в EE-контейнер, изолируя версии и коллекции.
  • navigator даёт текстовый интерфейс (TUI) для разбора результатов: можно проваливаться по play, по task, смотреть факты и документацию модулей не выходя из терминала.
Под капотом это всё ещё тот же ansible-core - navigator не заменяет движок, он меняет способ запуска и разбора. Поэтому весь твой YAML, роли, FQCN-имена модулей вроде ansible.builtin.copy или ansible.posix.firewalld остаются как есть.

Изображение

Установка и первый ansible-navigator run

На RHEL 9 и Fedora ставится из pip (в AAP - из подписочного репозитория). Нужен ещё контейнерный движок - на RHEL это обычно podman.

Код: Выделить всё

# движок контейнеров
sudo dnf install -y podman python3-pip

# сам navigator (в venv, чтобы не ломать системный python)
python3 -m venv ~/.venv/nav
source ~/.venv/nav/bin/activate
pip install ansible-navigator

ansible-navigator --version
podman --version
В Ubuntu/Debian вместо dnf будет apt install podman python3-pip, в RED OS и Astra - свои репозитории с podman, но логика та же. Дальше первый прогон. Минимальный плейбук site.yml:

Код: Выделить всё

---
- name: Базовая настройка веб-узла
  hosts: web
  become: true
  tasks:
    - name: Установить nginx
      ansible.builtin.dnf:
        name: nginx
        state: present

    - name: Открыть http в firewalld
      ansible.posix.firewalld:
        service: http
        permanent: true
        state: enabled
        immediate: true

    - name: Запустить и включить службу
      ansible.builtin.systemd:
        name: nginx
        state: started
        enabled: true
Запуск - команда ansible navigator run:

Код: Выделить всё

# интерактивный режим (TUI) - по умолчанию
ansible-navigator run site.yml -i inventory

# тот же прогон, но вывод как у обычного ansible-playbook
ansible-navigator run site.yml -i inventory -m stdout
При самом первом запуске navigator скачает образ EE (по умолчанию что-то вроде ee-supported или community ee). Если podman ругается, что образ не найден - проверь pull policy и доступ к реестру registry.redhat.io.

Текстовый интерфейс: режимы stdout и interactive

Два режима, между которыми ты будешь переключаться постоянно.

stdout (флаг -m stdout или mode: stdout в конфиге) - привычная простыня вывода, как у ansible-playbook. Удобно для CI, для grep, для копипасты в тикет.

interactive - дефолт, тот самый TUI. После прогона ты не теряешь результат в скролле, а заходишь внутрь: видишь список play, нажимаешь номер - проваливаешься в задачи этого play, ещё раз номер - в конкретный task с разобранным результатом по каждому хосту. Это резко ускоряет разбор "почему на host3 changed, а на host2 ok".

Внутри TUI работают команды с двоеточием. Самые ходовые:
  • :doc ansible.posix.firewalld - открыть документацию модуля прямо в навигаторе, не лазая в браузер.
  • :collections - список коллекций, доступных внутри EE. Сразу видно, что реально вшито в образ, а не "что я думаю там есть".
  • :inventory - просмотр инвентаря, групп и хостов.
  • :help - полный список горячих клавиш.
  • :quit (или Esc для шага назад) - выход.
Команда :collections - твой главный диагност на экзамене. Если задача требует community.general.parted, а в :collections её нет - значит образ EE не тот, и плейбук упадёт. Лучше узнать это до прогона, чем во время.

Конфиг ansible-navigator.yml: чтобы не таскать флаги руками

Каждый раз писать -i inventory --execution-environment-image ... --pull-policy ... неудобно. Всё это выносится в проектный файл ansible-navigator.yml (или .yaml) в корне проекта. Navigator ищет его так: сначала переменная ANSIBLE_NAVIGATOR_CONFIG, потом ./ansible-navigator.yml в текущем каталоге, потом ~/.ansible-navigator.yml.

Код: Выделить всё

---
ansible-navigator:
  execution-environment:
    image: registry.redhat.io/ansible-automation-platform-25/ee-supported-rhel9:latest
    enabled: true
    pull:
      policy: missing
  ansible:
    inventory:
      entries:
        - inventory
  mode: stdout
  playbook-artifact:
    enable: true
    save-as: "artifacts/{playbook_name}-{time_stamp}.json"
Разберём ключевое:
  • execution-environment.image - какой образ EE использовать. Тут же выбираешь нужную версию ansible-core косвенно, через образ.
  • pull.policy - когда тянуть образ: missing (только если локально нет - самый частый выбор), always (всегда свежий), never (только локальные, удобно офлайн и на экзамене без интернета).
  • ansible.inventory.entries - инвентари по умолчанию, чтобы не передавать -i руками.
  • mode - stdout или interactive по умолчанию.
  • playbook-artifact - navigator умеет сохранять полный результат прогона в JSON-артефакт, который потом можно открыть через ansible-navigator replay <файл>. Очень помогает разбирать "что было вчера".
После такого конфига запуск ужимается до ansible-navigator run site.yml - остальное подтянется из файла.

Связь с AWX и Ansible Automation Platform

Главная мысль, ради которой всё затевалось: один и тот же EE-образ работает и локально под navigator, и на сервере автоматизации. ansible awx (апстрим-проект, родственник коммерческого AAP - о нём отдельная глава 42) исполняет джобы именно внутри Execution Environment. Поэтому связка простая:
  • разработал и отладил плейбук локально через ansible-navigator на образе ee-supported;
  • тот же образ зарегистрирован в AWX/AAP как Execution Environment;
  • загрузил проект - джоба бежит ровно в том же окружении, без сюрпризов "у меня работало".
Это и есть ответ на вопрос "почему navigator - будущее запуска Ansible": он стирает границу между ноутбуком инженера и платформой автоматизации. Что проверил локально - то и поедет в прод.

Типичные грабли
  • Забыл про контейнерный движок. Нет podman/docker - navigator не запустит EE. Симптом: ошибка про отсутствие container engine.
  • Ждёшь модуль, которого нет в образе. parted, firewalld, posix-штуки живут в коллекциях ansible.posix и community.general, и они должны быть вшиты в EE. Проверяй :collections, не полагайся на память.
  • pull-policy always без интернета. На изолированной машине ставь missing или never, иначе прогон зависнет на попытке тянуть образ.
  • Думаешь, что navigator меняет твой YAML. Нет. FQCN, идемпотентность, become - всё то же. Меняется только обёртка запуска.
  • Путаешь mode. Запустил в interactive, ждёшь stdout для CI - и получаешь TUI, который в пайплайне просто виснет. В автоматизации всегда -m stdout.
Мини-лаба
Руками, на RHEL 9 или Fedora:
  • Поставь podman и ansible-navigator в venv, проверь обе версии.
  • Напиши site.yml из примера выше и инвентарь с одной группой web.
  • Запусти ansible-navigator run site.yml -i inventory без -m stdout. Зайди в TUI, провались в play, потом в task, посмотри результат по хостам.
  • Внутри TUI набери :collections и найди ansible.posix. Потом :doc ansible.posix.firewalld.
  • Создай ansible-navigator.yml с execution-environment, inventory и mode: stdout. Запусти просто ansible-navigator run site.yml - убедись, что флаги больше не нужны.
  • Поменяй pull.policy на never и повтори прогон офлайн.
Контрольные вопросы
  • Чем ansible-navigator принципиально отличается от ansible-playbook при выполнении задач?
  • Какая команда TUI покажет, какие коллекции реально вшиты в текущий EE-образ?
  • Где navigator ищет файл ansible-navigator.yml и за что отвечает ключ pull.policy?
  • Почему один и тот же EE-образ важен для связки локальный запуск - AWX/AAP?
Итог
ansible-navigator - это современный способ запускать Ansible: контент крутится внутри Execution Environment, версии и коллекции зафиксированы, а TUI с :doc, :collections и :inventory ускоряет разбор. Конфиг ansible-navigator.yml убирает рутину флагов, а единый образ EE связывает твой ноутбук с AWX и AAP. На новом RHCE (EX294 на RHEL 9) это уже базовый навык, так что прогоняй плейбуки через navigator с самого начала - привыкнешь до экзамена.
👍2 ❤️3 🔥 😄 🤔
Аватара пользователя
tmiura
Сообщения: 1
Зарегистрирован: 29 май 2026, 19:56

Re: ansible-navigator: запуск плейбуков в Execution Environment

Сообщение tmiura »

Наконец-то дошло зачем этот navigator нужен. Раньше думал просто модный ansible-playbook, а тут :collections реально спасает - сразу видно есть в образе нужная коллекция или нет. Раз пять на этом срезался на репетиции EX294.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
raspberrymain
Сообщения: 1
Зарегистрирован: 30 май 2026, 05:47

Re: ansible-navigator: запуск плейбуков в Execution Environment

Сообщение raspberrymain »

Подскажите, а pull-policy never обязательно ставить на экзамене? Боюсь что навигатор полезет в registry.redhat.io без инета и прогон повиснет. Или там образ уже локально лежит заранее?
👍 ❤️ 🔥 😄 🤔
Ответить
← Предыдущая глава
Сборка Execution Environment с ansible-builder
Следующая глава →
Управление SSH-ключами через Ansible: authorized_key

Все главы курса «Ansible: автоматизация и подготовка к RHCE (EX294)»

Поделиться темой: ✈ Telegram VK
  • Похожие темы
Похожие запросы: что такое ansible простыми словамиansible для начинающих с чего начатьустановка ansible на linuxчто такое playbook в ansibleструктура ansible playbook из чего состоитпеременные ansible приоритет какая важнее

Вернуться в «Ansible: автоматизация и подготовка к RHCE (EX294)»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость