Executar e inspecionar Playbooks com o Navigator

AnsibleBeginner
Pratique Agora

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.