Введение
Реальная автоматизация в RHEL часто объединяет установку пакетов, управление службами и настройку правил межсетевого экрана в одном конвергентном playbook.
В этой лабораторной работе вы установите httpd, убедитесь, что служба включена и запущена, разрешите HTTP-трафик через firewalld и докажете идемпотентность вашего playbook.
Создание проекта автоматизации служб RHEL
На этом этапе вы создадите проект для одного хоста, предназначенный для автоматизации состояния пакетов, служб и межсетевого экрана на виртуальной машине RHEL 10.
cd /home/labex/project
mkdir -p rhce-ansible/{inventory,playbooks,reports}
cd rhce-ansible
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
host_key_checking = False
retry_files_enabled = False
EOF
cat > inventory/hosts <<'EOF'
[web]
host ansible_connection=local
EOF
Playbook будет вносить реальные изменения в локальную систему RHEL, поэтому в данной лабораторной работе используется псевдоним локального хоста. Это позволит вам практиковаться в использовании модулей Ansible для работы с пакетами, службами и межсетевым экраном через стандартную инвентаризацию.
Определение желаемого состояния веб-службы
На этом этапе вы сохраните желаемое состояние в переменных. Хранение имен пакетов, служб и настроек межсетевого экрана в переменных упрощает настройку playbook. Перед выполнением команд на этом этапе вернитесь в каталог проекта Ansible. Это обеспечит стабильность выполнения команд, даже если LabEx запускает каждый шаг отдельно.
cd /home/labex/project/rhce-ansible
mkdir -p inventory/group_vars
cat > inventory/group_vars/web.yml <<'EOF'
web_package: httpd
web_service: httpd
firewall_service: http
EOF
Использование переменных делает playbook похожим на описание политики: установить этот пакет, управлять этой службой и разрешить эту службу в firewalld. Если позже вы решите автоматизировать другую службу, структура задач останется прежней.
cat inventory/group_vars/web.yml
Написание Playbook для пакетов, служб и межсетевого экрана
На этом этапе вы напишете playbook с повышением привилегий. Он использует модули package, service и ansible.posix.firewalld для приведения веб-стека к нужному состоянию.
Перед выполнением команд на этом этапе вернитесь в каталог проекта Ansible.
cd /home/labex/project/rhce-ansible
cat > playbooks/web-stack.yml <<'EOF'
---
- name: Configure a basic web stack
hosts: web
become: true
gather_facts: false
tasks:
- name: Install web package
ansible.builtin.package:
name: "{{ web_package }}"
state: present
- name: Ensure web service is enabled and running
ansible.builtin.service:
name: "{{ web_service }}"
state: started
enabled: true
- name: Allow web traffic through the firewall
ansible.posix.firewalld:
service: "{{ firewall_service }}"
permanent: true
immediate: true
state: enabled
EOF
Эти три задачи обеспечивают конвергенцию состояния RHEL. package гарантирует, что RPM-пакет установлен, service проверяет, что unit-файл systemd запущен и добавлен в автозагрузку, а ansible.posix.firewalld открывает HTTP-службу как немедленно, так и на постоянной основе.
ansible-playbook playbooks/web-stack.yml --syntax-check
Запуск Playbook для веб-стека
На этом этапе вы запустите playbook. Установка пакетов может занять больше времени, чем работа с файлами, так как задействуется менеджер пакетов RHEL.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/web-stack.yml | tee reports/web-stack-first.txt
Первый запуск может занять больше времени, пока dnf устанавливает httpd. Прочитайте отчет после завершения, а затем используйте инструменты RHEL ниже, чтобы подтвердить состояние системы, а не только вывод playbook.
rpm -q httpd
Команда rpm -q должна вывести имя и версию установленного пакета httpd.
systemctl is-active httpd
Служба должна вернуть статус active, что подтверждает работу веб-сервера.
sudo firewall-cmd --list-services | tr " " "
" | grep -Fx http
Эта команда проверяет активные службы в firewalld и ищет точное совпадение http. Открытие межсетевого экрана — это отдельное состояние, отличное от установки и запуска службы.
Повторный запуск для подтверждения идемпотентности
На этом этапе вы снова запустите тот же playbook. Поскольку пакет, служба и межсетевой экран уже находятся в нужном состоянии, отчет должен показать отсутствие изменений.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/web-stack.yml | tee reports/web-stack-second.txt
Второй запуск должен пройти быстрее и не требовать никаких исправлений. Это проверка идемпотентности для комбинированного рабочего процесса с пакетами, службами и межсетевым экраном.
grep -E 'host.*changed=0' reports/web-stack-second.txt
Резюме
Вы установили пакет, настроили службу, открыли межсетевой экран, проверили состояние системы RHEL и доказали, что playbook корректно отрабатывает при повторном запуске.


