Сквозной проект и подготовка к экзамену EX294

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

Сквозной проект и подготовка к экзамену EX294

Сообщение 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 (вы здесь)
Ты прошёл весь курс: инвентарь, переменные, факты, циклы, условия, шаблоны, роли, vault, обработка ошибок. По отдельности каждая тема понятна. А теперь представь экран на экзамене: четыре часа, два десятка задач, чистая система и ты один. Здесь решает не знание отдельных модулей, а умение собрать их в работающий сценарий быстро и без паники. Этот финальный урок именно про сборку. Сначала мы построим один сквозной проект, где встречается почти всё, что нужно для практики и для боя. Потом разберём чек-лист по темам EX294 и тактику, которая экономит время на самом экзамене.

Сразу про матчасть. RHCE (это и есть Red Hat Certified Engineer, экзамен EX294) много лет шёл на RHEL 8, версия RH294 для RHEL 9 закрепила ansible-core как отдельный пакет, а с 2025-2026 Red Hat двигает программу на RHEL 10 и рабочий процесс через ansible-navigator с execution environment. Хорошая новость: фундамент не поменялся. Плейбуки, роли, vault, идемпотентность - то же самое. Меняется обёртка запуска. Поэтому если твоя подготовка к rhce строится на понимании механики, ты переживёшь смену версии спокойно.

Сквозной проект: инвентарь, group_vars и vault

Соберём типовой стенд: группа веб-серверов и группа БД. Начинаем с инвентаря - это скелет всего.

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

# inventory
[webservers]
web1.example.com
web2.example.com

[databases]
db1.example.com

[production:children]
webservers
databases
Дальше переменные по группам. Открытые значения кладём в обычный файл, секреты - в зашифрованный vault. Структура каталога стандартная: рядом с инвентарём папка group_vars, в ней подкаталог на группу.

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

# group_vars/databases/vars.yml
db_name: appdb
db_user: appuser

# group_vars/databases/vault.yml  (зашифровано ansible-vault)
db_password: "S3cretPass!"
Файл vault.yml шифруется командой:

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

ansible-vault encrypt group_vars/databases/vault.yml
Хитрость, которую любят на экзамене: разделять открытые и секретные переменные на vars.yml и vault.yml, а в vault держать значение под отдельным именем (например vault_db_password) и присваивать его в vars. Так переменную видно в открытом файле, а её значение остаётся зашифрованным.

Изображение

Роли, шаблоны и handlers

Логику раскладываем по ролям. Роль webserver ставит nginx или httpd, кладёт конфиг из шаблона и дёргает handler на перезапуск. Роль database ставит и настраивает СУБД. Скелет роли создаётся одной командой:

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

ansible-galaxy init roles/webserver
Главные задачи роли webserver выглядят так. Обрати внимание на полные имена модулей (FQCN) - это требование современного Ansible и ожидание проверяющего:

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

# roles/webserver/tasks/main.yml
---
- name: Установить веб-сервер
  ansible.builtin.dnf:
    name: httpd
    state: present

- name: Развернуть конфиг из шаблона
  ansible.builtin.template:
    src: vhost.conf.j2
    dest: /etc/httpd/conf.d/vhost.conf
    owner: root
    group: root
    mode: "0644"
  notify: restart httpd

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

- name: Запустить и включить httpd
  ansible.builtin.service:
    name: httpd
    state: started
    enabled: true
Handler срабатывает только если шаблон реально изменился - это и есть идемпотентность в действии:

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

# roles/webserver/handlers/main.yml
---
- name: restart httpd
  ansible.builtin.service:
    name: httpd
    state: restarted
Шаблон Jinja2 с подстановкой переменных и фактов:

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

# roles/webserver/templates/vhost.conf.j2
ServerName {{ ansible_facts['fqdn'] }}
DocumentRoot /var/www/html
# Узлов в группе webservers: {{ groups['webservers'] | length }}
На RHEL семействе пакет называется httpd, сервис httpd, фаервол - firewalld, доступ рулит SELinux. На Ubuntu/Debian это был бы apache2 через apt и ufw вместо firewalld, в RED OS и Astra - тот же dnf/apt-подход в зависимости от базы. Команды в уроке реальны именно для RHEL.

Плейбук site.yml, запуск и обработка ошибок

Верхний плейбук связывает группы с ролями. Это и есть классический site.yml:

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

# site.yml
---
- name: Настройка веб-серверов
  hosts: webservers
  become: true
  roles:
    - webserver

- name: Настройка БД
  hosts: databases
  become: true
  roles:
    - database
Запуск с проверкой синтаксиса, прогоном вхолостую и подстановкой пароля vault:

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

ansible-playbook --syntax-check site.yml
ansible-playbook site.yml --check --ask-vault-pass
ansible-playbook site.yml --ask-vault-pass
Обработку ошибок добавляй там, где задача может законно упасть. Блок с rescue ловит сбой и не валит весь плейбук, а ignore_errors и failed_when дают тонкий контроль:

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

- name: Безопасная проверка сервиса
  block:
    - name: Проверить ответ веб-сервера
      ansible.builtin.command: curl -sf http://localhost
      register: curl_out
      changed_when: false
  rescue:
    - name: Сообщить о проблеме
      ansible.builtin.debug:
        msg: "Веб-сервер не ответил, смотрим логи"
Чек-лист готовности к EX294

Это твоя личная ansible шпаргалка перед экзаменом. Если по каждому пункту можешь сделать руками без подсказки - ты готов.
  • Установка и настройка ansible-core, ansible.cfg, файл инвентаря со статическими группами и children.
  • ad-hoc команды через ansible и модуль -m, разбор вывода.
  • Плейбук: hosts, become, tasks, FQCN-модули, name у каждой задачи.
  • Переменные всех уровней, факты ansible_facts, register и debug.
  • Циклы loop, условия when, обработка изменений changed_when и failed_when.
  • Шаблоны Jinja2, фильтры, доступ к groups и hostvars.
  • Роли: структура, ansible-galaxy init, подключение через roles и include_role, зависимости в meta.
  • Ansible Vault: encrypt, edit, rekey, запуск с --ask-vault-pass или --vault-id.
  • Управление системой: пакеты dnf, сервисы systemd, пользователи и группы, cron, archive/unarchive, parted и filesystem для дисков.
  • Сеть и безопасность: firewalld, authorized_key, базовое понимание SELinux-контекстов.
  • Готовые роли и коллекции из Galaxy: установка через requirements.yml.
Тактика на экзамене и частые грабли

Ansible экзамен - это не проверка памяти, а проверка скорости и аккуратности. Несколько вещей, которые реально решают.

ansible-doc вместо зубрёжки. Никто не помнит все параметры. Команда ansible-doc ansible.posix.firewalld покажет имена и примеры прямо в терминале. На экзамене это разрешено и это твой главный союзник.

Идемпотентность - критерий зачёта. Проверяющий гоняет твой плейбук дважды. Первый прогон делает changed, второй должен быть весь ok. Если задача каждый раз показывает changed (частый случай с command и shell) - добавь changed_when: false или creates.

--check и --syntax-check. Прогоняй вхолостую перед боевым запуском, лови ошибки до того, как они что-то сломают.

Тайм-менеджмент. Двадцать задач за четыре часа. Не залипай на одной. Сделал, что знаешь, спорное оставил на потом. Проходной порог - 210 из 300.

Теперь грабли, на которых срезаются чаще всего:
  • YAML-отступы. Только пробелы, никаких табов. Сбитый отступ - и плейбук не парсится. Настрой редактор заранее.
  • Забытый FQCN. Современный линтер ругается на короткие имена. Пиши ansible.builtin.copy, а не copy.
  • Пропущенный become: true. Половина задач требует root, а ошибка permission denied выглядит загадочно.
  • Precedence переменных. Если значение не то, что ждёшь - вспомни порядок: extra-vars важнее всего, дальше task vars, block vars, role vars, потом group_vars и host_vars. group_vars/all - самый слабый уровень.
  • Незашифрованный секрет. Пароль в открытом vars.yml - это провал по безопасности, даже если плейбук работает.
Мини-лаба

Повтори руками без подглядывания: подними инвентарь с группами webservers и databases, заведи group_vars с открытыми переменными и зашифрованным vault.yml, создай роль webserver через ansible-galaxy init, напиши tasks с установкой httpd, шаблоном конфига и handler на restart, открой порт через firewalld, собери site.yml и прогони его с --check, а потом по-настоящему. Затем запусти второй раз и убедись, что всё ok без changed. Сломай отступ специально и посмотри на ошибку - чтобы узнавать её мгновенно.

Контрольные вопросы
  • Чем отличается хранение секрета в vars.yml от схемы vault_db_password в vault.yml плюс присваивание в vars?
  • Почему задача с ansible.builtin.command может ломать идемпотентность и как это лечится?
  • Какой уровень переменных перебьёт group_vars/all и почему это важно понимать на экзамене?
  • Зачем прогонять плейбук с --check и --syntax-check до боевого запуска?
Итог и напутствие

Ты собрал сквозной проект, где встретились инвентарь, group_vars с vault, роли, шаблоны, handlers и обработка ошибок - ровно тот набор, который проверяет EX294. Дальше расти есть куда: ansible-navigator и execution environment, AWX как open-source ядро, Ansible Automation Platform (AAP) на проде и интеграция Ansible в полноценные DevOps-пайплайны. Но фундамент у тебя уже есть. На экзамене не пытайся всё помнить - помни механику, а детали бери из ansible-doc. Пиши идемпотентно, проверяй --check, следи за отступами и временем. Спокойствие и аккуратность тут важнее скорости пальцев. Удачи на EX294 - ты подготовлен лучше, чем кажется.
👍4 ❤️1 🔥1 😄 🤔2
Аватара пользователя
fedya1
Сообщения: 1
Зарегистрирован: 03 июн 2026, 22:31

Re: Сквозной проект и подготовка к экзамену EX294

Сообщение fedya1 »

Спасибо, чек-лист прям закрыл главный страх. Сидел и не понимал, как они проверяют идемпотентность, а оказывается просто гоняют плейбук дважды. Теперь буду сам так тестить перед сдачей.
👍1 ❤️1 🔥1 😄 🤔
Аватара пользователя
FpgaPilot
Сообщения: 1
Зарегистрирован: 11 май 2026, 05:13

Re: Сквозной проект и подготовка к экзамену EX294

Сообщение FpgaPilot »

Вопрос про vault: на экзамене лучше один общий vault.yml на все группы или отдельный на каждую? У меня пароль БД и токен апи, хочу разнести, но боюсь запутаться с --vault-id при запуске.
👍1 ❤️1 🔥1 😄 🤔
Ответить
← Предыдущая глава
SELinux через Ansible: булевы, контексты и порты

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

Поделиться темой: ✈ Telegram VK
Похожие запросы: как готовиться к экзамену rhce ex294 с нуля

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

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

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