Introdução
As variáveis permitem que você mantenha os dados separados da lógica das tarefas. As variáveis de grupo fornecem valores compartilhados, as variáveis de host substituem valores para hosts individuais e os fatos adicionam dados descobertos do sistema.
Neste laboratório, você definirá variáveis de grupo e de host, coletará fatos do RHEL e gerará um relatório para cada alias de host.
Criar um Projeto de Prática de Variáveis
Nesta etapa, você criará um projeto com aliases de hosts web e diretórios de variáveis.
cd /home/labex/project
mkdir -p rhce-ansible/{inventory/group_vars,inventory/host_vars,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'
[web]
web1 ansible_connection=local
web2 ansible_connection=local
EOF
Ambos os hosts são aliases locais, mas o Ansible ainda resolve as variáveis separadamente para cada nome no inventário. Isso permite que você pratique substituições específicas de host sem a necessidade de máquinas virtuais adicionais.
Definir Variáveis de Grupo Compartilhadas
Nesta etapa, você definirá valores que se aplicam a todos os hosts no grupo web.
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 > inventory/group_vars/web.yml <<'EOF'
service_name: demo-web
service_port: 8080
EOF
Esses valores se aplicam a todos os hosts no grupo web. Neste ponto, tanto web1 quanto web2 usariam a porta 8080.
cat inventory/group_vars/web.yml
Substituir uma Variável de Host
Nesta etapa, você substituirá a service_port apenas para o web2. As variáveis de host são mais específicas do que as variáveis de grupo.
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 > inventory/host_vars/web2.yml <<'EOF'
service_port: 9090
EOF
Este arquivo é mais específico do que o group_vars/web.yml, portanto, apenas o web2 deve usar a porta 9090. O web1 deve continuar usando o valor definido no grupo.
ansible-inventory --host web2
Inspecione a saída do host resolvido e procure por service_port. Este comando mostra o valor final que o Ansible usará antes da execução de qualquer playbook.
Escrever um Playbook de Relatório com Fatos
Nesta etapa, você escreverá um playbook que combina variáveis de inventário com fatos coletados. O fato ansible_distribution_major_version vem do host gerenciado.
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/report-vars.yml <<'EOF'
---
- name: Render variable and fact reports
hosts: web
gather_facts: true
tasks:
- name: Write per-host variable report
ansible.builtin.copy:
dest: "/home/labex/project/rhce-ansible/reports/{{ inventory_hostname }}.txt"
content: |
host={{ inventory_hostname }}
service={{ service_name }}
port={{ service_port }}
rhel_major={{ ansible_distribution_major_version }}
mode: '0644'
EOF
O relatório combina duas fontes de dados: variáveis de inventário, como service_port, e fatos coletados, como ansible_distribution_major_version. Este é um padrão comum quando a configuração depende tanto da intenção declarada quanto de detalhes descobertos do sistema.
ansible-playbook playbooks/report-vars.yml --syntax-check
Executar o Relatório de Variáveis
Nesta etapa, você executará o playbook e comparará os relatórios. Os valores compartilhados devem ser iguais, enquanto a porta deve diferir para o web2.
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/report-vars.yml | tee reports/report-run.txt
A execução deve coletar os fatos primeiro e, em seguida, gravar um relatório para cada host. Um resumo bem-sucedido com failed=0 significa que ambos os aliases de host geraram seus relatórios.
cat reports/web1.txt reports/web2.txt
Compare as linhas port=: o web1 deve mostrar 8080, enquanto o web2 deve mostrar 9090. O valor compartilhado service= deve ser idêntico em ambos os relatórios.
Resumo
Você definiu variáveis de grupo, substituiu um valor com variáveis de host, coletou fatos e gerou relatórios que comprovam como o Ansible resolveu cada valor.


