Criar e Usar Fatos Personalizados

AnsibleBeginner
Pratique Agora

Introdução

Os fatos personalizados (custom facts) permitem que hosts gerenciados publiquem dados locais para o Ansible. Fatos colocados em /etc/ansible/facts.d tornam-se disponíveis através do ansible_local após a coleta de fatos.

Neste laboratório, você instalará um pequeno arquivo de fato personalizado e o utilizará em um segundo play para gerar um relatório.

Criar um Projeto de Fato Personalizado

Nesta etapa, você criará um projeto para instalar e ler um fato 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

Os fatos personalizados são instalados no host gerenciado, portanto, este laboratório requer tanto um arquivo de origem no projeto quanto um playbook que o copie para /etc/ansible/facts.d.

Criar um Arquivo de Origem de Fato Local

Nesta etapa, você criará um arquivo de fato no estilo INI. O nome da seção e as chaves aparecerão em ansible_local.rhce_custom.general. Antes de executar os comandos nesta etapa, retorne ao diretório do projeto Ansible. Isso mantém os comandos estáveis, mesmo quando o LabEx executa cada etapa separadamente.

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

O arquivo utiliza sintaxe no estilo INI. Após a coleta de fatos, o nome da seção general e suas chaves tornam-se disponíveis em ansible_local.rhce_custom.general.

cat files/rhce_custom.fact

Escrever um Playbook que Instala e Lê o Fato

Nesta etapa, você escreverá um playbook com dois plays. O primeiro play instala o arquivo de fato com privilégios elevados; o segundo play coleta os fatos novamente para que o ansible_local inclua os novos dados. Antes de executar os comandos nesta etapa, retorne ao diretório do projeto Ansible. Isso mantém os comandos estáveis, mesmo quando o LabEx executa cada etapa separadamente.

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

O primeiro play instala o arquivo de fato com become porque /etc/ansible/facts.d é um caminho do sistema. O segundo play coleta os fatos novamente; sem essa segunda coleta, o ansible_local não incluiria o fato recém-instalado na mesma execução.

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

Executar o Playbook de Fato Personalizado

Nesta etapa, você instalará o fato personalizado e gerará um relatório a partir do ansible_local. O primeiro play modifica o armazenamento de fatos do sistema, e o segundo play comprova que o Ansible consegue lê-lo. Antes de executar os comandos nesta etapa, retorne ao diretório do projeto Ansible. Isso mantém os comandos estáveis, mesmo quando o LabEx executa cada etapa separadamente.

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

A primeira execução deve alterar o sistema instalando o arquivo de fato e escrevendo o relatório. A saída salva é útil caso o segundo play não consiga encontrar o ansible_local.

cat reports/custom-fact.txt

O relatório deve conter os valores de course e track do arquivo de fato local, provando que o Ansible coletou e utilizou o fato personalizado.

Inspecionar o ansible_local Diretamente

Nesta etapa, você usará o módulo setup com um filtro para visualizar a árvore de fatos personalizados diretamente. Antes de executar os comandos nesta etapa, retorne ao diretório do projeto Ansible. Isso mantém os comandos estáveis, mesmo quando o LabEx executa cada etapa separadamente.

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

A saída do módulo setup é a árvore de fatos bruta. Filtrar por ansible_local mantém a saída focada nos fatos personalizados fornecidos localmente.

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

A saída do grep deve mostrar o nome do fato personalizado e os valores que você escreveu. Este é o caminho de inspeção direta a ser usado quando um playbook não consegue visualizar o ansible_local.

Resumo

Você instalou um fato personalizado local no host, coletou os fatos novamente, utilizou o ansible_local em um playbook e inspecionou o fato personalizado através do módulo setup.