Введение
Запуск плейбука — это лишь часть работы с Ansible. Вам также необходимо анализировать вывод задач, понимать итоговую сводку (recap) и проверять конечное состояние управляемого узла.
В этой лабораторной работе вы запустите плейбук с помощью ansible-navigator, создадите управляемые файлы, повторно запустите плейбук и убедитесь, что целевое состояние системы достигнуто.
Подготовка конфигурации проекта
На этом этапе вы создадите проект, который navigator сможет запускать без дополнительных параметров командной строки. Конфигурация похожа на предыдущую лабораторную работу, но в этот раз плейбук будет управлять несколькими файлами.
Создайте проект и перейдите в него.
cd /home/labex/project
mkdir -p rhce-ansible/{inventory/group_vars,playbooks,files}
cd rhce-ansible
Создайте файлы инвентаризации и конфигурации.
cat > inventory/hosts <<'EOF'
[managed]
node1 ansible_connection=local
EOF
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
retry_files_enabled = False
interpreter_python = auto_silent
EOF
Инвентаризация создает группу managed с одним локальным псевдонимом хоста. Файл ansible.cfg делает эту инвентаризацию используемой по умолчанию, поэтому navigator может запускать плейбук из директории проекта без дополнительных флагов инвентаризации.
cat > ansible-navigator.yml <<'EOF'
---
ansible-navigator:
mode: stdout
execution-environment:
enabled: false
playbook-artifact:
enable: false
EOF
Настройки navigator позволяют работать в терминальном режиме. mode: stdout выводит результаты задач напрямую, локальное выполнение позволяет избежать настройки контейнеров, а отключение артефактов ограничивает количество создаваемых файлов только теми, что вы создали сами.
Создание исходного контента для плейбука
На этом этапе вы создадите исходный контент, который будет развернут плейбуком. Хранение исходных файлов внутри проекта позволяет четко понимать, чем управляет Ansible.
Перед выполнением команд на этом этапе вернитесь в директорию проекта, чтобы относительные пути указывали на проект Ansible.
cd /home/labex/project/rhce-ansible
Создайте исходный файл.
cat > files/motd.txt <<'EOF'
RHCE Ansible navigator practice host
EOF
Это исходный контент: файл, который вы хотите развернуть с помощью Ansible, а не финальная копия на управляемом узле. Разделение исходных файлов и сгенерированного вывода упрощает понимание того, за что отвечает плейбук.
Создайте переменную пути к целевой директории в файле переменных группы инвентаризации. Хранение этого файла в inventory/group_vars обеспечивает его корректную загрузку, когда плейбуки хранятся в поддиректории.
mkdir -p inventory/group_vars
cat > inventory/group_vars/all.yml <<'EOF'
managed_dir: /home/labex/project/rhce-ansible/managed-state
EOF
managed_dir — это переменная, специфичная для проекта. Определение её в inventory/group_vars/all.yml позволяет плейбуку ссылаться на имя переменной вместо повторения одного и того же абсолютного пути в каждой задаче.
Написание плейбука для управления состоянием
На этом этапе вы напишете плейбук, который создает директорию и копирует в неё файл. Модуль file управляет директориями и правами доступа, а модуль copy развертывает содержимое файла. Поскольку этот плейбук находится в директории playbooks, путь к источнику ../files/motd.txt указывает на директорию files уровня проекта.
Перед выполнением команд на этом этапе вернитесь в директорию проекта, чтобы относительные пути указывали на проект Ansible.
cd /home/labex/project/rhce-ansible
Создайте playbooks/manage-state.yml.
cat > playbooks/manage-state.yml <<'EOF'
---
- name: Manage local state with navigator
hosts: managed
gather_facts: false
tasks:
- name: Create managed state directory
ansible.builtin.file:
path: "{{ managed_dir }}"
state: directory
mode: '0755'
- name: Deploy managed message
ansible.builtin.copy:
src: ../files/motd.txt
dest: "{{ managed_dir }}/motd.txt"
mode: '0644'
EOF
Прочитайте плейбук. Первая задача гарантирует наличие целевой директории, а вторая копирует исходный файл в эту директорию. Выражения {{ managed_dir }} заменяются значением, загруженным из inventory/group_vars/all.yml.
Выполните проверку синтаксиса перед внесением изменений в систему.
ansible-playbook playbooks/manage-state.yml --syntax-check
Эта проверка полезна, даже если вы будете запускать плейбук через navigator. Navigator передает плейбук в Ansible, поэтому плейбук, который не проходит стандартную проверку синтаксиса, также не будет работать через navigator.
Запуск плейбука с помощью Navigator
На этом этапе вы выполните плейбук. Строка итогов (recap) важна: ok подсчитывает задачи, которые достигли желаемого состояния, changed — задачи, которые внесли изменения, а failed=0 означает, что выполнение завершилось успешно.
Перед выполнением команд на этом этапе вернитесь в директорию проекта, чтобы относительные пути указывали на проект Ansible.
cd /home/labex/project/rhce-ansible
Запустите плейбук.
ansible-navigator run playbooks/manage-state.yml
Проверьте содержимое созданного файла напрямую.
Итоги выполнения показывают, завершился ли процесс, но наличие файла подтверждает, что желаемое состояние достигнуто. Вы должны увидеть тот же текст, который поместили в files/motd.txt.
cat managed-state/motd.txt
Повторный запуск и проверка идемпотентности
На этом этапе вы снова запустите тот же плейбук. Хорошо написанный плейбук должен быть безопасным для повторного выполнения. Если файл уже содержит требуемое содержимое и права доступа, Ansible не должен вносить повторных изменений.
Перед выполнением команд на этом этапе вернитесь в директорию проекта, чтобы относительные пути указывали на проект Ansible.
cd /home/labex/project/rhce-ansible
Запустите плейбук во второй раз и сохраните вывод.
ansible-navigator run playbooks/manage-state.yml | tee navigator-second-run.txt
Найдите строку итогов. Точные интервалы могут отличаться, но в итогах не должно быть ошибок.
Второй запуск проверяет повторяемость. Успешное выполнение с failed=0 доказывает, что плейбук можно применять повторно без нарушения управляемого состояния; если также отображается changed=0, это означает, что задачи уже были выполнены ранее.
grep -E 'failed=0' navigator-second-run.txt
Резюме
Вы запустили плейбук с помощью ansible-navigator, проверили созданный им файл и повторно выполнили плейбук, чтобы убедиться в его корректной работе. Это базовый цикл «запуск-анализ-проверка», используемый в автоматизации Ansible.



