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.


