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.


