Créer et utiliser des faits personnalisés

AnsibleBeginner
Pratiquer maintenant

Introduction

Les faits personnalisés permettent aux hôtes gérés de publier des données locales vers Ansible. Les faits placés sous /etc/ansible/facts.d deviennent accessibles via ansible_local après la collecte des faits.

Dans ce laboratoire, vous allez installer un petit fichier de faits personnalisés et l'utiliser dans un second play pour générer un rapport.

Créer un projet de faits personnalisés

Dans cette étape, vous allez créer un projet pour installer et lire un fait personnalisé.

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

Les faits personnalisés sont installés sur l'hôte géré ; ce laboratoire nécessite donc à la fois un fichier source dans le projet et un playbook qui le copie dans /etc/ansible/facts.d.

Créer un fichier source de faits locaux

Dans cette étape, vous allez créer un fichier de faits au format INI. Le nom de la section et les clés apparaîtront sous ansible_local.rhce_custom.general. Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible. Cela garantit la stabilité des commandes, même si LabEx exécute chaque étape séparément.

cd /home/labex/project/rhce-ansible
cat > files/rhce_custom.fact <<'EOF'
[general]
course=rhce-ansible
track=custom-facts
EOF

Le fichier utilise une syntaxe de type INI. Après la collecte des faits, le nom de la section general et ses clés deviennent disponibles sous ansible_local.rhce_custom.general.

cat files/rhce_custom.fact

Rédiger un playbook pour installer et lire le fait

Dans cette étape, vous allez rédiger un playbook composé de deux plays. Le premier play installe le fichier de faits avec une élévation de privilèges ; le second play collecte à nouveau les faits afin que ansible_local inclue les nouvelles données. Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible.

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

Le premier play installe le fichier de faits avec become car /etc/ansible/facts.d est un chemin système. Le second play collecte à nouveau les faits ; sans cette seconde collecte, ansible_local n'inclurait pas le fait nouvellement installé lors de la même exécution.

ansible-playbook playbooks/custom-fact.yml --syntax-check

Exécuter le playbook de faits personnalisés

Dans cette étape, vous allez installer le fait personnalisé et générer un rapport à partir de ansible_local. Le premier play modifie le stockage des faits système, et le second prouve qu'Ansible peut les lire. Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible.

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/custom-fact.yml | tee reports/custom-fact-run.txt

La première exécution doit modifier le système en installant le fichier de faits et en écrivant le rapport. La sortie enregistrée est utile si le second play ne parvient pas à trouver ansible_local.

cat reports/custom-fact.txt

Le rapport doit contenir les valeurs course et track provenant du fichier de faits local, prouvant qu'Ansible a bien collecté et utilisé le fait personnalisé.

Inspecter directement ansible_local

Dans cette étape, vous allez utiliser le module setup avec un filtre pour visualiser directement l'arborescence des faits personnalisés. Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible.

cd /home/labex/project/rhce-ansible
ansible managed -m ansible.builtin.setup -a 'filter=ansible_local' | tee reports/ansible-local.txt

La sortie du module setup correspond à l'arborescence brute des faits. Le filtrage sur ansible_local permet de concentrer la sortie sur les faits personnalisés fournis localement.

grep -E 'rhce_custom|custom-facts|rhce-ansible' reports/ansible-local.txt

La sortie de grep doit afficher le nom du fait personnalisé et les valeurs que vous avez saisies. Il s'agit de la méthode d'inspection directe à utiliser lorsqu'un playbook ne parvient pas à voir ansible_local.

Résumé

Vous avez installé un fait personnalisé local à l'hôte, collecté à nouveau les faits, utilisé ansible_local dans un playbook et inspecté le fait personnalisé via le module setup.