Ansible Playbooks: RHEL Admin Cookbook (Artikel 110)
Praktische Rezepte für die tägliche Administration von RHEL-Systemen mit Ansible. Von der Benutzerverwaltung bis hin zum automatisierten Patch-Management.
# Ansible Cookbook: Praxis-Lösungen für RHEL Admins
TL;DR / Management Summary Theorie ist gut, Praxis ist besser. In diesem Modul finden Sie fertige Ansible-Rezepte für die häufigsten Aufgaben eines RHEL-Admins. Alle Playbooks sind auf Idempotenz und Enterprise-Standards (SELinux-Awareness, saubere Pfade) optimiert. Kopieren, anpassen, ausführen.
# 1. Rezept: Benutzer & SSH-Schlüssel verwalten
Standardisierung des Zugriffs.
Dieses Playbook erstellt einen Admin-User, fügt ihn zur Sudo-Gruppe hinzu und hinterlegt den SSH-Key.
- name: Setup Admin User
hosts: all
become: yes
tasks:
- name: Ensure group 'wheel' exists
group:
name: wheel
state: present
- name: Create sysadmin user
user:
name: sysadmin
group: wheel
shell: /bin/bash
create_home: yes
- name: Add SSH Key
authorized_key:
user: sysadmin
state: present
key: "{{ lookup('file', 'id_ed25519.pub') }}"
# 2. Rezept: Enterprise Update Management
Patching ohne Stress.
Updates inklusive Reboot-Handling, wenn ein neuer Kernel installiert wurde.
- name: Patch Management
hosts: all
become: yes
tasks:
- name: Upgrade all packages
dnf:
name: "*"
state: latest
update_cache: yes
- name: Check if reboot is required
shell: needs-restarting -r
register: reboot_required
ignore_errors: yes
changed_when: false
- name: Reboot if kernel was updated
reboot:
when: reboot_required.rc != 0
# 3. Rezept: Kernel-Parameter & sysctl
Tuning für Performance.
Nutzen Sie das sysctl Modul statt lineinfile, um Parameter sauber in /etc/sysctl.d/ zu verwalten.
- name: Performance Tuning
hosts: db_servers
become: yes
tasks:
- name: Optimize Network Stack
sysctl:
name: net.core.somaxconn
value: '4096'
state: present
reload: yes
# 4. Rezept: SELinux Booleans & Kontext
Sicherheit automatisieren.
- name: Harden Webserver
hosts: web_servers
become: yes
tasks:
- name: Allow Nginx to connect to DB
seboolean:
name: httpd_can_network_connect_db
state: yes
persistent: yes
- name: Set context for custom web root
sefcontext:
target: '/data/html(/.*)?'
setype: httpd_sys_content_t
state: present
- name: Apply context
command: restorecon -Rv /data/html
# 5. Day-2 Operations: Fehler vermeiden
Saubere Playbooks.
# Nutzen Sie Templates (jinja2)
Hardcodieren Sie niemals Konfigurationen. Nutzen Sie Templates für /etc/httpd/conf.d/vhost.conf.
- name: Deploy vHost
template:
src: vhost.conf.j2
dest: /etc/httpd/conf.d/myapp.conf
notify: Restart Apache
# 6. Troubleshooting & “War Stories”
Wenn Ansible ‘failed’ meldet.
# Story 1: “Der hängende DNF-Lock”
Symptom: Das Playbook bricht beim dnf Task ab, weil eine andere Instanz den Lock hält.
Ursache: PackageKit (GUI) oder dnf-makecache laufen im Hintergrund.
Lösung: Nutzen Sie retries und delay im Ansible-Task:
- name: Install package with retry
dnf:
name: htop
state: present
register: dnf_result
until: dnf_result is success
retries: 5
delay: 10
# 7. Fazit & Empfehlung
- Idempotenz: Prüfen Sie Ihre Playbooks immer zweimal. Ein zweiter Durchlauf sollte
0 changedergeben. - Best Practice: Nutzen Sie Variablen-Dateien (
group_vars/,host_vars/), um die Logik der Playbooks von den server-spezifischen Daten zu trennen. - Git: Jede Änderung an der Infrastruktur muss erst durch einen Git-Commit und ggf. ein Peer-Review gehen.
# Anhang: Cheatsheet
| Aufgabe | Modul |
|---|---|
| Paketverwaltung | dnf |
| Dienste steuern | systemd |
| Dateien kopieren | copy / template |
| Rechte ändern | file |
| Befehle ausführen | command / shell |
| SELinux Status | selinux |
| Sudo Rechte | become: yes |
| Firewalld | firewalld |