Crear y utilizar hechos personalizados

AnsibleBeginner
Practicar Ahora

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.