Что такое 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-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
Код: Выделить всё
---
- 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
Код: Выделить всё
# интерактивный режим (TUI) - по умолчанию
ansible-navigator run site.yml -i inventory
# тот же прогон, но вывод как у обычного ansible-playbook
ansible-navigator run site.yml -i inventory -m stdout
Текстовый интерфейс: режимы 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 для шага назад) - выход.
Конфиг 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 <файл>. Очень помогает разбирать "что было вчера".
Связь с AWX и Ansible Automation Platform
Главная мысль, ради которой всё затевалось: один и тот же EE-образ работает и локально под navigator, и на сервере автоматизации. ansible awx (апстрим-проект, родственник коммерческого AAP - о нём отдельная глава 42) исполняет джобы именно внутри Execution Environment. Поэтому связка простая:
- разработал и отладил плейбук локально через ansible-navigator на образе ee-supported;
- тот же образ зарегистрирован в AWX/AAP как Execution Environment;
- загрузил проект - джоба бежит ровно в том же окружении, без сюрпризов "у меня работало".
Типичные грабли
- Забыл про контейнерный движок. Нет 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 с самого начала - привыкнешь до экзамена.