Автоматизация пакетов, служб и межсетевых экранов

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

Введение

Реальная автоматизация в 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 корректно отрабатывает при повторном запуске.