Einführung
Echte RHEL-Automatisierung kombiniert häufig die Paketinstallation, die Dienstverwaltung und Firewall-Regeln in einem einzigen, konvergenten Playbook.
In diesem Lab installieren Sie httpd, stellen sicher, dass der Dienst aktiviert ist und läuft, erlauben HTTP-Datenverkehr durch die firewalld und belegen die Idempotenz des Playbooks.
Erstellen eines RHEL-Dienstautomatisierungsprojekts
In diesem Schritt erstellen Sie ein Projekt für einen einzelnen Host, um den Status von Paketen, Diensten und der Firewall auf der RHEL 10 VM zu automatisieren.
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
Das Playbook nimmt echte Änderungen am lokalen RHEL-System vor, daher verwendet dieses Lab einen lokalen Host-Alias. Dies ermöglicht es Ihnen dennoch, die Paket-, Dienst- und Firewall-Module von Ansible über die normale Inventar-Adressierung zu üben.
Definieren des gewünschten Webdienst-Status
In diesem Schritt speichern Sie den gewünschten Status in Variablen. Wenn Sie Paket-, Dienst- und Firewall-Namen in Variablen halten, lässt sich das Playbook leichter anpassen. Bevor Sie die Befehle in diesem Schritt ausführen, kehren Sie in das Ansible-Projektverzeichnis zurück. Dies sorgt für konsistente Befehlspfade, auch wenn LabEx jeden Schritt separat ausführt.
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
Durch die Verwendung von Variablen liest sich das Playbook wie eine Richtlinie: Installiere dieses Paket, verwalte diesen Dienst und erlaube diesen firewalld-Dienst. Wenn Sie später einen anderen Dienst automatisieren, kann die Aufgabenstruktur identisch bleiben.
cat inventory/group_vars/web.yml
Schreiben des Playbooks für Paket, Dienst und Firewall
In diesem Schritt schreiben Sie ein Playbook mit Privilegienerweiterung (Privilege Escalation). Es verwendet package, service und ansible.posix.firewalld, um den Web-Stack zu konvergieren.
Bevor Sie die Befehle in diesem Schritt ausführen, kehren Sie in das Ansible-Projektverzeichnis zurück.
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
Die drei Aufgaben konvergieren den zugehörigen RHEL-Status. package stellt sicher, dass das RPM installiert ist, service sorgt dafür, dass die systemd-Unit läuft und aktiviert ist, und ansible.posix.firewalld öffnet den HTTP-Dienst sowohl sofort als auch dauerhaft.
ansible-playbook playbooks/web-stack.yml --syntax-check
Ausführen des Web-Stack-Playbooks
In diesem Schritt führen Sie das Playbook aus. Die Paketinstallation kann länger dauern als in Labs, die nur Dateien bearbeiten, da hier der RHEL-Paketmanager zum Einsatz kommt.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/web-stack.yml | tee reports/web-stack-first.txt
Der erste Durchlauf kann länger dauern, während dnf das Paket httpd installiert. Lesen Sie die Zusammenfassung nach Abschluss und verwenden Sie anschließend die unten aufgeführten RHEL-Tools, um den tatsächlichen Systemstatus zu überprüfen, nicht nur die Playbook-Ausgabe.
rpm -q httpd
rpm -q sollte den Namen und die Version des installierten httpd-Pakets ausgeben.
systemctl is-active httpd
Der Dienst sollte active melden, was bestätigt, dass der Webdienst aktuell läuft.
sudo firewall-cmd --list-services | tr " " "
" | grep -Fx http
Dies überprüft die aktiven firewalld-Dienste und sucht exakt nach http. Das Öffnen der Firewall ist ein separater Statusvorgang neben der Installation und dem Starten des Dienstes.
Erneute Ausführung zur Bestätigung der Idempotenz
In diesem Schritt führen Sie dasselbe Playbook erneut aus. Sobald Paket, Dienst und Firewall korrekt konfiguriert sind, sollte die Zusammenfassung keine Änderungen melden.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/web-stack.yml | tee reports/web-stack-second.txt
Der zweite Durchlauf sollte schneller sein und keine Reparaturen erfordern. Dies ist der Idempotenz-Test für den kombinierten Workflow aus Paket-, Dienst- und Firewall-Konfiguration.
grep -E 'host.*changed=0' reports/web-stack-second.txt
Zusammenfassung
Sie haben ein Paket installiert, einen Dienst verwaltet, die Firewall geöffnet, den RHEL-Systemstatus überprüft und nachgewiesen, dass das Playbook bei einem zweiten Durchlauf konvergiert.


