Introdução
Executar um playbook é apenas uma parte do trabalho com o Ansible. Você também precisa inspecionar a saída das tarefas, entender o resumo (recap) e verificar o estado final do nó gerenciado.
Neste laboratório, você executará um playbook com o ansible-navigator, criará arquivos gerenciados, executará o playbook novamente e inspecionará as evidências de que o estado desejado foi alcançado.
Preparar a configuração do projeto
Nesta etapa, você criará um projeto que o navigator pode executar sem opções extras de linha de comando. A configuração é semelhante à do laboratório anterior, mas desta vez o playbook gerenciará vários arquivos.
Crie e acesse o projeto.
cd /home/labex/project
mkdir -p rhce-ansible/{inventory/group_vars,playbooks,files}
cd rhce-ansible
Crie os arquivos de inventário e configuração.
cat > inventory/hosts <<'EOF'
[managed]
node1 ansible_connection=local
EOF
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
retry_files_enabled = False
interpreter_python = auto_silent
EOF
O inventário cria um grupo managed com um alias de host local. O arquivo ansible.cfg torna esse inventário o padrão, permitindo que o navigator execute o playbook a partir do diretório do projeto sem sinalizadores de inventário adicionais.
cat > ansible-navigator.yml <<'EOF'
---
ansible-navigator:
mode: stdout
execution-environment:
enabled: false
playbook-artifact:
enable: false
EOF
As configurações do navigator mantêm este laboratório focado no terminal. O mode: stdout imprime a saída da tarefa diretamente, a execução local evita a configuração de contêineres e a desativação de artefatos mantém os arquivos visíveis do projeto limitados aos que você criar.
Criar conteúdo de origem para o Playbook
Nesta etapa, você criará o conteúdo de origem que o playbook implantará. Manter os arquivos de origem no projeto torna claro o que é de responsabilidade do Ansible.
Antes de executar os comandos nesta etapa, retorne ao diretório do projeto para que os caminhos relativos se refiram ao projeto Ansible.
cd /home/labex/project/rhce-ansible
Crie um arquivo de origem.
cat > files/motd.txt <<'EOF'
RHCE Ansible navigator practice host
EOF
Este é o conteúdo de origem: é o arquivo que você deseja que o Ansible implante, não a cópia gerenciada final. Manter os arquivos de origem separados da saída gerada facilita a visualização do que o playbook gerencia.
Crie uma variável de caminho de diretório de destino em um arquivo de variáveis de grupo do inventário. Manter este arquivo em inventory/group_vars faz com que ele seja carregado de forma consistente quando os playbooks são armazenados em um subdiretório.
mkdir -p inventory/group_vars
cat > inventory/group_vars/all.yml <<'EOF'
managed_dir: /home/labex/project/rhce-ansible/managed-state
EOF
managed_dir é uma variável específica do projeto. Defini-la em inventory/group_vars/all.yml permite que o playbook se refira a um nome em vez de repetir o mesmo caminho absoluto em cada tarefa.
Escrever o Playbook de estado gerenciado
Nesta etapa, você escreverá um playbook que cria um diretório e copia um arquivo para dentro dele. O módulo file gerencia diretórios e permissões; o módulo copy implanta o conteúdo do arquivo. Como este playbook reside no diretório playbooks, o caminho de origem ../files/motd.txt aponta de volta para o diretório files no nível do projeto.
Antes de executar os comandos nesta etapa, retorne ao diretório do projeto para que os caminhos relativos se refiram ao projeto Ansible.
cd /home/labex/project/rhce-ansible
Crie o arquivo playbooks/manage-state.yml.
cat > playbooks/manage-state.yml <<'EOF'
---
- name: Manage local state with navigator
hosts: managed
gather_facts: false
tasks:
- name: Create managed state directory
ansible.builtin.file:
path: "{{ managed_dir }}"
state: directory
mode: '0755'
- name: Deploy managed message
ansible.builtin.copy:
src: ../files/motd.txt
dest: "{{ managed_dir }}/motd.txt"
mode: '0644'
EOF
Leia o playbook na ordem. A primeira tarefa garante que o diretório de destino exista, e a segunda tarefa copia o arquivo de origem para esse diretório. As expressões {{ managed_dir }} são substituídas pelo valor carregado de inventory/group_vars/all.yml.
Execute uma verificação de sintaxe antes de alterar o sistema.
ansible-playbook playbooks/manage-state.yml --syntax-check
Esta verificação ainda é útil, mesmo que você execute o playbook com o navigator. O navigator entrega o playbook ao Ansible, portanto, um playbook que falha na análise de sintaxe normal também falhará através do navigator.
Executar o Playbook com o Navigator
Nesta etapa, você executará o playbook. A linha de resumo (recap) é importante: ok conta as tarefas que atingiram o estado desejado, changed conta as tarefas que modificaram algo e failed=0 significa que a execução foi concluída com sucesso.
Antes de executar os comandos nesta etapa, retorne ao diretório do projeto para que os caminhos relativos se refiram ao projeto Ansible.
cd /home/labex/project/rhce-ansible
Execute o playbook.
ansible-navigator run playbooks/manage-state.yml
Inspecione o arquivo de saída gerenciado diretamente.
O resumo informa se a execução foi concluída, mas o arquivo gerenciado prova que o estado solicitado existe. Você deve ver o mesmo texto que colocou em files/motd.txt.
cat managed-state/motd.txt
Executar novamente e inspecionar a idempotência
Nesta etapa, você executará o mesmo playbook novamente. Um playbook bem escrito deve ser seguro para repetir. Se o arquivo já tiver o conteúdo e as permissões solicitadas, o Ansible não precisará alterá-lo novamente.
Antes de executar os comandos nesta etapa, retorne ao diretório do projeto para que os caminhos relativos se refiram ao projeto Ansible.
cd /home/labex/project/rhce-ansible
Execute o playbook uma segunda vez e salve a saída.
ansible-navigator run playbooks/manage-state.yml | tee navigator-second-run.txt
Procure pelo resumo. O espaçamento exato pode variar, mas o resumo ainda deve mostrar zero falhas.
A segunda execução trata da repetibilidade. Uma execução limpa com failed=0 prova que o playbook pode ser aplicado novamente sem quebrar o estado gerenciado; se changed=0 também aparecer, isso mostra que as tarefas já estavam satisfeitas.
grep -E 'failed=0' navigator-second-run.txt
Resumo
Você executou um playbook com o ansible-navigator, inspecionou o arquivo gerenciado que ele criou e repetiu o playbook para verificar se ele pode ser executado novamente de forma limpa. Este é o ciclo básico de executar-inspecionar-verificar usado em todo o trabalho de automação com Ansible.



