Запуск и проверка плейбуков с помощью Navigator

AnsibleBeginner
Практиковаться сейчас

Введение

Запуск плейбука — это лишь часть работы с 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.