Automatisierung von Benutzern, Dateien und geplanten Aufgaben

AnsibleBeginner
Jetzt üben

Einführung

Die Automatisierung von Benutzern und geplanten Aufgaben ist ein Standardbestandteil operativer Playbooks. Ansible ermöglicht es, Benutzerkonten zu erstellen, Dateiberechtigungen zu verwalten und Cron-Einträge sicher einzurichten.

In diesem Lab erstellen Sie einen temporären Dienstbenutzer, verwalten ein Verzeichnis sowie eine Datei für Berichte und richten einen Cron-Job für diesen Benutzer ein.

Ein Projekt zur Benutzerautomatisierung erstellen

In diesem Schritt erstellen Sie ein Projekt zur Verwaltung eines temporären Dienstbenutzers namens rhce_ops.

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'
[managed]
host ansible_connection=local
EOF

Das Setup hat alle vorherigen rhce_ops-Konten entfernt, sodass der erste Playbook-Durchlauf den vollständigen Erstellungsprozess anzeigt. Das Konto ist temporär und vom LabEx-Benutzer labex getrennt.

Variablen für Konto und Zeitplan definieren

In diesem Schritt definieren Sie Variablen für das Dienstkonto, das Berichtsverzeichnis und den Cron-Zeitplan. Bevor Sie die Befehle in diesem Schritt ausführen, kehren Sie in das Ansible-Projektverzeichnis zurück. Dies stellt sicher, dass die Befehle auch dann stabil funktionieren, wenn LabEx jeden Schritt separat ausführt.

cd /home/labex/project/rhce-ansible
mkdir -p inventory/group_vars
cat > inventory/group_vars/managed.yml <<'EOF'
ops_user: rhce_ops
ops_comment: RHCE automation operator
ops_report_dir: /home/rhce_ops/reports
cron_minute: '*/15'
EOF

Diese Variablen beschreiben das Konto und die Zeitplanrichtlinie. Die Anführungszeichen bei */15 sind beabsichtigt, da YAML das Zeichen * speziell behandeln kann; die Anführungszeichen stellen sicher, dass es als Cron-String erhalten bleibt.

cat inventory/group_vars/managed.yml

Das Playbook für Benutzer und Dateien schreiben

In diesem Schritt schreiben Sie ein Playbook, das den Benutzer erstellt, ein Verzeichnis mit den entsprechenden Eigentumsrechten anlegt, eine verwaltete Datei schreibt und einen Cron-Eintrag installiert. 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/users-files-cron.yml <<'EOF'
---
- name: Manage user files and scheduled task
  hosts: managed
  become: true
  gather_facts: false
  tasks:
    - name: Ensure operations user exists
      ansible.builtin.user:
        name: "{{ ops_user }}"
        comment: "{{ ops_comment }}"
        shell: /bin/bash
        state: present

    - name: Ensure report directory exists
      ansible.builtin.file:
        path: "{{ ops_report_dir }}"
        state: directory
        owner: "{{ ops_user }}"
        group: "{{ ops_user }}"
        mode: '0750'

    - name: Install managed report file
      ansible.builtin.copy:
        dest: "{{ ops_report_dir }}/status.txt"
        content: |
          managed_by=ansible
        owner: "{{ ops_user }}"
        group: "{{ ops_user }}"
        mode: '0640'

    - name: Install heartbeat cron job
      ansible.builtin.cron:
        name: RHCE heartbeat
        user: "{{ ops_user }}"
        minute: "{{ cron_minute }}"
        job: "/usr/bin/date >> {{ ops_report_dir }}/heartbeat.log"
EOF

Die Aufgaben bauen aufeinander auf: Der Benutzer muss existieren, bevor Eigentumsrechte zugewiesen werden können; das Berichtsverzeichnis muss vorhanden sein, bevor die Statusdatei geschrieben wird; und der Cron-Job wird unter demselben Benutzer ausgeführt.

ansible-playbook playbooks/users-files-cron.yml --syntax-check

Das Automatisierungs-Playbook ausführen

In diesem Schritt führen Sie das Playbook aus und überprüfen das Konto, die Dateiberechtigungen und den Cron-Eintrag.

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/users-files-cron.yml | tee reports/users-files-cron-run.txt

Der erste Durchlauf sollte den Benutzer, das Verzeichnis, die Statusdatei und den Cron-Eintrag erstellen. Das Speichern der Ausgabe hilft Ihnen dabei, Änderungen am Konto von Änderungen an Dateien und Cron-Jobs zu unterscheiden.

id rhce_ops

Der Befehl id bestätigt, dass das Konto existiert und über numerische Benutzer- und Gruppen-IDs verfügt.

sudo ls -ld /home/rhce_ops/reports && sudo ls -l /home/rhce_ops/reports/status.txt

Das Verzeichnis und die Datei sollten dem Benutzer rhce_ops gehören. Die Statusdatei sollte den Modus 0640 verwenden, was dem Eigentümer Lese-/Schreibzugriff und der Gruppe Lesezugriff gewährt.

sudo crontab -u rhce_ops -l

Die Crontab sollte den benannten Heartbeat-Eintrag sowie den Befehl enthalten, der das Datum an heartbeat.log anhängt.

Die Konvergenz des Playbooks bestätigen

In diesem Schritt führen Sie das Playbook erneut aus. Da das Konto, die Dateien und der Cron-Eintrag bereits dem gewünschten Zustand entsprechen, sollten keine Änderungen erforderlich sein.

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/users-files-cron.yml | tee reports/users-files-cron-second.txt

Der zweite Durchlauf sollte changed=0 melden, da das Konto, der Dateistatus und die Crontab bereits mit den Variablen und Aufgaben übereinstimmen.

grep -E 'host.*changed=0' reports/users-files-cron-second.txt

Zusammenfassung

Sie haben einen temporären Benutzer, Dateiberechtigungen und einen Cron-Job automatisiert und anschließend die Idempotenz des Playbooks bestätigt.