Benutzerdefinierte Fakten erstellen und verwenden

AnsibleBeginner
Jetzt üben

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.