Introducción
Los hechos personalizados (custom facts) permiten que los hosts gestionados publiquen datos locales para Ansible. Los hechos ubicados en /etc/ansible/facts.d quedan disponibles a través de ansible_local después de la recopilación de hechos.
En este laboratorio, instalará un pequeño archivo de hechos personalizados y lo utilizará en un segundo play para generar un informe.
Crear un proyecto de hechos personalizados
En este paso, creará un proyecto para instalar y leer un hecho personalizado.
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
Los hechos personalizados se instalan en el host gestionado, por lo que este laboratorio requiere tanto un archivo de origen en el proyecto como un playbook que lo copie en /etc/ansible/facts.d.
Crear un archivo de origen de hechos locales
En este paso, creará un archivo de hechos con formato INI. El nombre de la sección y las claves aparecerán bajo ansible_local.rhce_custom.general.
Antes de ejecutar los comandos en este paso, regrese al directorio del proyecto de Ansible. Esto mantiene la estabilidad de los comandos incluso cuando LabEx ejecuta cada paso por separado.
cd /home/labex/project/rhce-ansible
cat > files/rhce_custom.fact <<'EOF'
[general]
course=rhce-ansible
track=custom-facts
EOF
El archivo utiliza una sintaxis de estilo INI. Después de la recopilación de hechos, el nombre de la sección general y sus claves estarán disponibles bajo ansible_local.rhce_custom.general.
cat files/rhce_custom.fact
Escribir un playbook que instale y lea el hecho
En este paso, escribirá un playbook de dos plays. El primer play instala el archivo de hechos con escalada de privilegios; el segundo play recopila los hechos nuevamente para que ansible_local incluya los nuevos datos.
Antes de ejecutar los comandos en este paso, regrese al directorio del proyecto de Ansible. Esto mantiene la estabilidad de los comandos incluso cuando LabEx ejecuta cada paso por separado.
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
El primer play instala el archivo de hechos con become porque /etc/ansible/facts.d es una ruta del sistema. El segundo play recopila los hechos nuevamente; sin esa segunda recopilación, ansible_local no incluiría el hecho recién instalado en la misma ejecución.
ansible-playbook playbooks/custom-fact.yml --syntax-check
Ejecutar el playbook de hechos personalizados
En este paso, instalará el hecho personalizado y generará un informe desde ansible_local. El primer play modifica el almacenamiento de hechos del sistema y el segundo play demuestra que Ansible puede leerlo. Antes de ejecutar los comandos en este paso, regrese al directorio del proyecto de Ansible. Esto mantiene la estabilidad de los comandos incluso cuando LabEx ejecuta cada paso por separado.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/custom-fact.yml | tee reports/custom-fact-run.txt
La primera ejecución debería realizar cambios en el sistema al instalar el archivo de hechos y escribir el informe. La salida guardada es útil si el segundo play no puede encontrar ansible_local.
cat reports/custom-fact.txt
El informe debe contener los valores de course y track del archivo de hechos local, lo que demuestra que Ansible recopiló y utilizó el hecho personalizado.
Inspeccionar ansible_local directamente
En este paso, utilizará el módulo setup con un filtro para ver el árbol de hechos personalizados directamente.
Antes de ejecutar los comandos en este paso, regrese al directorio del proyecto de Ansible. Esto mantiene la estabilidad de los comandos incluso cuando LabEx ejecuta cada paso por separado.
cd /home/labex/project/rhce-ansible
ansible managed -m ansible.builtin.setup -a 'filter=ansible_local' | tee reports/ansible-local.txt
La salida del módulo setup es el árbol de hechos sin procesar. Filtrar por ansible_local mantiene la salida enfocada en los hechos personalizados suministrados localmente.
grep -E 'rhce_custom|custom-facts|rhce-ansible' reports/ansible-local.txt
La salida de grep debería mostrar el nombre del hecho personalizado y los valores que escribió. Esta es la ruta de inspección directa que debe utilizar cuando un playbook no pueda ver ansible_local.
Resumen
Instaló un hecho personalizado local en el host, recopiló hechos nuevamente, utilizó ansible_local en un playbook e inspeccionó el hecho personalizado a través del módulo setup.


