linux-rhel-centos-fedora automation ansible cookbook rhel best-practices

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 changed ergeben.
  • 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