Einführung
Mit benutzerdefinierten Fakten (Custom Facts) können verwaltete Hosts lokale Daten für Ansible bereitstellen. Fakten, die unter /etc/ansible/facts.d abgelegt werden, sind nach der Faktenermittlung (Fact Gathering) über ansible_local verfügbar.
In diesem Lab installieren Sie eine kleine Datei mit benutzerdefinierten Fakten und verwenden diese in einem zweiten Play, um einen Bericht zu erstellen.
Projekt für benutzerdefinierte Fakten erstellen
In diesem Schritt erstellen Sie ein Projekt zur Installation und zum Auslesen eines benutzerdefinierten Fakts.
cd /home/labex/project
mkdir -p rhce-ansible/{inventory,files,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
Benutzerdefinierte Fakten werden auf dem verwalteten Host installiert. Daher benötigt dieses Lab sowohl eine Quelldatei im Projektverzeichnis als auch ein Playbook, das diese nach /etc/ansible/facts.d kopiert.
Quelldatei für lokale Fakten erstellen
In diesem Schritt erstellen Sie eine Faktendatei im INI-Stil. Der Sektionsname und die Schlüssel werden unter ansible_local.rhce_custom.general erscheinen.
Bevor Sie die Befehle in diesem Schritt ausführen, kehren Sie in das Ansible-Projektverzeichnis zurück. Dies stellt sicher, dass die Befehle stabil bleiben, auch wenn LabEx jeden Schritt separat ausführt.
cd /home/labex/project/rhce-ansible
cat > files/rhce_custom.fact <<'EOF'
[general]
course=rhce-ansible
track=custom-facts
EOF
Die Datei verwendet die Syntax im INI-Stil. Nach der Faktenermittlung sind der Sektionsname general und seine Schlüssel unter ansible_local.rhce_custom.general verfügbar.
cat files/rhce_custom.fact
Playbook zum Installieren und Auslesen des Fakts schreiben
In diesem Schritt schreiben Sie ein Playbook mit zwei Plays. Das erste Play installiert die Faktendatei mit erhöhten Rechten; das zweite Play führt die Faktenermittlung erneut durch, sodass ansible_local die neuen Daten enthält.
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/custom-fact.yml <<'EOF'
---
- name: Install custom fact
hosts: managed
become: true
gather_facts: false
tasks:
- name: Ensure facts directory exists
ansible.builtin.file:
path: /etc/ansible/facts.d
state: directory
mode: '0755'
- name: Install RHCE custom fact
ansible.builtin.copy:
src: ../files/rhce_custom.fact
dest: /etc/ansible/facts.d/rhce_custom.fact
mode: '0644'
- name: Read custom fact after gathering facts
hosts: managed
gather_facts: true
tasks:
- name: Write custom fact report
ansible.builtin.copy:
dest: /home/labex/project/rhce-ansible/reports/custom-fact.txt
content: |
course={{ ansible_local.rhce_custom.general.course }}
track={{ ansible_local.rhce_custom.general.track }}
mode: '0644'
EOF
Das erste Play installiert die Faktendatei mit become, da /etc/ansible/facts.d ein Systempfad ist. Das zweite Play führt die Faktenermittlung erneut aus; ohne diesen zweiten Durchlauf würde ansible_local das neu installierte Fakt im selben Lauf nicht enthalten.
ansible-playbook playbooks/custom-fact.yml --syntax-check
Playbook für benutzerdefinierte Fakten ausführen
In diesem Schritt installieren Sie das benutzerdefinierte Fakt und erstellen einen Bericht aus ansible_local. Das erste Play ändert den Systemspeicher für Fakten, und das zweite Play beweist, dass Ansible ihn lesen kann.
Bevor Sie die Befehle in diesem Schritt ausführen, kehren Sie in das Ansible-Projektverzeichnis zurück.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/custom-fact.yml | tee reports/custom-fact-run.txt
Der erste Durchlauf sollte das System durch die Installation der Faktendatei und das Schreiben des Berichts verändern. Die gespeicherte Ausgabe ist nützlich, falls das zweite Play ansible_local nicht finden kann.
cat reports/custom-fact.txt
Der Bericht sollte die Werte course und track aus der lokalen Faktendatei enthalten, was beweist, dass Ansible das benutzerdefinierte Fakt erfasst und verwendet hat.
ansible_local direkt untersuchen
In diesem Schritt verwenden Sie das Modul setup mit einem Filter, um den Baum der benutzerdefinierten Fakten direkt anzuzeigen.
Bevor Sie die Befehle in diesem Schritt ausführen, kehren Sie in das Ansible-Projektverzeichnis zurück.
cd /home/labex/project/rhce-ansible
ansible managed -m ansible.builtin.setup -a 'filter=ansible_local' | tee reports/ansible-local.txt
Die Ausgabe des Moduls setup ist der rohe Faktenbaum. Die Filterung auf ansible_local hält die Ausgabe auf die lokal bereitgestellten benutzerdefinierten Fakten fokussiert.
grep -E 'rhce_custom|custom-facts|rhce-ansible' reports/ansible-local.txt
Die Ausgabe von grep sollte den Namen des benutzerdefinierten Fakts und die von Ihnen geschriebenen Werte anzeigen. Dies ist der direkte Untersuchungsweg, den Sie verwenden sollten, wenn ein Playbook ansible_local nicht sehen kann.
Zusammenfassung
Sie haben ein host-lokales benutzerdefiniertes Fakt installiert, die Fakten erneut ermittelt, ansible_local in einem Playbook verwendet und das benutzerdefinierte Fakt über das Modul setup untersucht.


