Solucionar Problemas de Playbooks e Hosts Ansible no RHEL

AnsibleBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a solucionar problemas comuns encontrados ao trabalhar com Ansible no Red Hat Enterprise Linux. Você ganhará experiência prática na identificação e resolução de uma variedade de problemas, desde a configuração inicial do ambiente até erros comuns de playbook e problemas de conectividade de host gerenciado. Os exercícios cobrem a correção de sintaxe YAML, a correção de erros de template Jinja2 e o diagnóstico de problemas em sistemas remotos.

Você começará preparando um ambiente RHEL e configurando o Ansible para logging eficaz. Em seguida, você mergulhará em cenários práticos de solução de problemas, usando o modo de verificação (check mode) do Ansible para diagnosticar problemas relacionados a serviços e corrigindo configurações de firewall para resolver a inalcançabilidade do host. Ao final deste laboratório, você estará equipado com um conjunto abrangente de habilidades para manter fluxos de trabalho de automação Ansible robustos.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 93%. Recebeu uma taxa de avaliações positivas de 100% dos estudantes.

Preparar o Ambiente RHEL e Configurar o Logging do Ansible

Nesta etapa, você preparará seu ambiente Red Hat Enterprise Linux para automação com Ansible. Isso envolve a instalação do software necessário, a criação de um diretório de projeto dedicado e a configuração de um arquivo de configuração básico para controlar o comportamento do Ansible e habilitar o logging. A configuração adequada é o primeiro passo para uma automação e solução de problemas eficazes.

  1. Instalar o Ansible

    Primeiro, você precisa instalar o Ansible. O motor de automação principal é fornecido pelo pacote ansible-core. Use o gerenciador de pacotes dnf com sudo para instalá-lo. O sinalizador -y responde automaticamente "sim" a quaisquer solicitações de confirmação.

    sudo dnf install -y ansible-core

    Você deverá ver uma saída indicando que o pacote está sendo instalado juntamente com suas dependências.

    Last metadata expiration check: ...
    Dependencies resolved.
    ================================================================================
     Package             Architecture   Version                Repository      Size
    ================================================================================
    Installing:
     ansible-core        x86_64         <version>              <repo>          2.8 M
    ...
    Transaction Summary
    ================================================================================
    Install  XX Packages
    
    Total download size: XX M
    Installed size: XX M
    ...
    Complete!
  2. Criar um Diretório de Projeto

    É uma boa prática organizar seus projetos Ansible em diretórios dedicados. Isso mantém seus playbooks, inventário e arquivos de configuração bem separados. Vamos criar um diretório chamado ansible_troubleshooting dentro da sua pasta de projeto pessoal e navegar até ele.

    mkdir -p ~/project/ansible_troubleshooting
    cd ~/project/ansible_troubleshooting

    A partir de agora, todos os comandos neste laboratório serão executados a partir do diretório ~/project/ansible_troubleshooting.

  3. Criar um Arquivo de Inventário Ansible

    Um inventário é um arquivo que lista os hosts (ou nós) que o Ansible gerenciará. Como você está trabalhando em uma única VM LabEx, configurará o Ansible para gerenciar a própria máquina local.

    Crie um arquivo chamado inventory e adicione localhost a ele. A parte ansible_connection=local informa ao Ansible para executar comandos diretamente no nó de controle (sua VM) sem usar SSH.

    echo "localhost ansible_connection=local" > inventory

    Você pode verificar o conteúdo do arquivo usando o comando cat:

    cat inventory

    Saída Esperada:

    localhost ansible_connection=local
  4. Configurar o Logging do Ansible

    Um arquivo ansible.cfg permite personalizar o comportamento do Ansible para um projeto específico. Quando colocado no diretório do projeto, suas configurações substituem os padrões do sistema. Aqui, você criará este arquivo para especificar o local do seu inventário e habilitar o logging. O logging é crucial para a solução de problemas, pois registra informações detalhadas sobre cada execução de playbook.

    Use o editor nano para criar o arquivo ansible.cfg.

    nano ansible.cfg

    Agora, copie e cole o seguinte conteúdo no editor nano. Esta configuração informa ao Ansible para usar o arquivo inventory no diretório atual e para gravar toda a saída de log em um arquivo chamado ansible.log.

    [defaults]
    inventory = /home/labex/project/ansible_troubleshooting/inventory
    log_path = /home/labex/project/ansible_troubleshooting/ansible.log

    Para salvar o arquivo no nano, pressione Ctrl+X, depois Y para confirmar e, finalmente, Enter para gravar o arquivo.

    Seu ambiente está agora totalmente preparado. Você tem o Ansible instalado e um diretório de projeto configurado com um inventário local e logging habilitado, pronto para as próximas etapas.

Corrigir Erros de Sintaxe e Indentação YAML num Playbook

Nesta etapa, você aprenderá a diagnosticar e corrigir dois dos tipos de erros mais comuns em playbooks Ansible: erros de sintaxe YAML e indentação incorreta. YAML, a linguagem usada para escrever playbooks, é muito rigorosa quanto à sua estrutura. Um único espaço mal colocado ou um caractere especial sem aspas pode impedir a execução de um playbook. Você usará o comando ansible-playbook --syntax-check, uma ferramenta essencial para validar seus playbooks antes da execução.

  1. Criar um Playbook com Erros Intencionais

    Primeiro, você criará um novo arquivo de playbook chamado webserver.yml em seu diretório de projeto (~/project/ansible_troubleshooting). Este arquivo contém erros intencionais que você corrigirá.

    Use nano para criar o arquivo:

    nano webserver.yml

    Copie e cole o seguinte conteúdo no editor. Observe os dois erros deliberados: uma string sem aspas contendo dois pontos e indentação incorreta para a segunda tarefa.

    ---
    - name: Configure Web Server
      hosts: localhost
      vars:
        ## ERROR 1: Unquoted colon in string
        package_comment: This is a package: httpd
      tasks:
        - name: Install httpd package
          ansible.builtin.dnf:
            name: httpd
            state: present
    
        ## ERROR 2: Incorrect indentation
          - name: Create a test index page
            ansible.builtin.copy:
              content: "<h1>Welcome to Ansible</h1>"
              dest: /var/www/html/index.html

    Salve o arquivo e saia do nano pressionando Ctrl+X, depois Y e Enter.

  2. Identificar e Corrigir o Erro de Sintaxe YAML (Dois Pontos sem Aspas)

    Agora, execute uma verificação de sintaxe no playbook que você acabou de criar. Este comando analisará o arquivo e relatará quaisquer problemas de sintaxe sem realmente executar as tarefas.

    ansible-playbook --syntax-check webserver.yml

    Saída Esperada (Erro): Você verá um erro porque o valor de package_comment contém dois pontos (:) mas não está entre aspas. O YAML interpreta os dois pontos como um separador chave-valor, levando a um erro de sintaxe.

    ERROR! We were unable to read either as JSON nor YAML, these are the errors we found:
    - Syntax Error while loading YAML.
      did not find expected ':'
    
    The error appears to be in '/home/labex/project/ansible_troubleshooting/webserver.yml': line 6, column 41, but may be elsewhere in the file depending on the exact syntax problem.
    
    The offending line appears to be:
    
      vars:
        package_comment: This is a package: httpd
                                            ^ here

    Solução: Para corrigir isso, você deve colocar a string entre aspas duplas. Abra o arquivo novamente com nano:

    nano webserver.yml

    Modifique a linha sob vars para adicionar aspas:

    ## ... (rest of the file)
    vars:
      ## FIX: Add quotes around the string with a colon
      package_comment: "This is a package: httpd"
    ## ... (rest of the file)

    Salve e saia do editor.

  3. Identificar e Corrigir o Erro de Indentação YAML

    Com o primeiro erro corrigido, execute a verificação de sintaxe novamente.

    ansible-playbook --syntax-check webserver.yml

    Saída Esperada (Erro): Desta vez, o Ansible relatará um erro diferente relacionado à estrutura do playbook.

    ERROR! A malformed block was encountered.
    
    The error appears to be in '/home/labex/project/ansible_troubleshooting/webserver.yml': line 13, column 11, but may be elsewhere in the file depending on the exact syntax problem.
    
    The offending line appears to be:
    
    
          ## ERROR 2: Incorrect indentation
          - name: Create a test index page
            ^ here

    Este erro ocorre porque o YAML usa indentação para definir a estrutura. Todos os itens em uma lista (neste caso, as tarefas, que são itens de lista começando com -) devem ter o mesmo nível de indentação. A segunda tarefa, Create a test index page, está indentada demais.

    Solução: Abra o arquivo mais uma vez para corrigir a indentação.

    nano webserver.yml

    Remova os espaços extras antes da segunda tarefa para que seu hífen (-) se alinhe perfeitamente com o hífen da primeira tarefa.

    ## ... (rest of the file)
    tasks:
      - name: Install httpd package
        ansible.builtin.dnf:
          name: httpd
          state: present
    
      ## FIX: Correct the indentation to align with the previous task
      - name: Create a test index page
        ansible.builtin.copy:
          content: "<h1>Welcome to Ansible</h1>"
          dest: /var/www/html/index.html

    Salve e saia do editor.

  4. Verificar o Playbook Corrigido

    Finalmente, execute a verificação de sintaxe mais uma vez.

    ansible-playbook --syntax-check webserver.yml

    Desta vez, o comando deverá ser concluído sem erros, e você verá o nome do playbook impresso, confirmando que a sintaxe agora está correta.

    Saída Esperada (Sucesso):

    playbook: webserver.yml

Corrigir Erros de Aspas e Caminho de Template Jinja2

Nesta etapa, você abordará erros relacionados ao Jinja2, o poderoso motor de templates do Ansible. Você aprenderá por que as expressões Jinja2 frequentemente precisam ser colocadas entre aspas e como depurar problemas quando um playbook não consegue encontrar um arquivo de template especificado. Estes são erros comuns de tempo de execução que ocorrem após um playbook já ter passado por uma verificação de sintaxe.

  1. Criar um Arquivo de Template Jinja2

    Primeiro, você precisa de um arquivo de template. Ao contrário de um arquivo estático, um template pode conter variáveis que o Ansible substituirá por valores reais durante a execução do playbook. Você criará um template HTML simples.

    Use nano para criar um arquivo chamado index.html.j2 em seu diretório de projeto (~/project/ansible_troubleshooting). A extensão .j2 é uma convenção comum para templates Jinja2.

    nano index.html.j2

    Copie e cole o seguinte conteúdo HTML no editor. Observe o placeholder {{ welcome_message }}, que é uma variável Jinja2.

    <h1>{{ welcome_message }}</h1>
    <p>This page was deployed by Ansible.</p>

    Salve o arquivo e saia do nano (Ctrl+X, Y, Enter).

  2. Modificar o Playbook para Usar o Template e Introduzir Erros

    Agora, modifique seu playbook webserver.yml para usar o módulo ansible.builtin.template. Você também introduzirá dois novos erros: uma variável Jinja2 sem aspas e um caminho de template incorreto.

    Abra webserver.yml com nano:

    nano webserver.yml

    Substitua todo o conteúdo do arquivo pelo seguinte. A diretiva become: true informa ao Ansible para executar tarefas com privilégios administrativos (usando sudo), o que é necessário para instalar software e gravar arquivos em diretórios do sistema como /var/www/html.

    ---
    - name: Configure Web Server
      hosts: localhost
      become: true
      vars:
        package_name: httpd
        welcome_message: "Welcome to Ansible with Jinja2"
      tasks:
        - name: Install httpd package
          ansible.builtin.dnf:
            ## ERROR 1: Unquoted Jinja2 variable
            name: { { package_name } }
            state: present
    
        - name: Create a test index page from template
          ansible.builtin.template:
            ## ERROR 2: Incorrect template source path
            src: index.j2
            dest: /var/www/html/index.html

    Salve e saia do editor.

  3. Identificar e Corrigir o Erro de Aspas Jinja2

    Mesmo que este seja um problema do Jinja2, ele pode se manifestar como um erro de sintaxe YAML. Execute o verificador de sintaxe para ver como o Ansible o interpreta.

    ansible-playbook --syntax-check webserver.yml

    Saída Esperada (Erro): Você receberá um erro de sintaxe porque um valor YAML que começa com {{ é tratado como uma construção especial e deve ser colocado entre aspas para ser interpretado como uma string.

    ERROR! A malformed block was encountered.
    
    The error appears to be in '/home/labex/project/ansible_troubleshooting/webserver.yml': line 11, column 19, but may be elsewhere in the file depending on the exact syntax problem.
    
    The offending line appears to be:
    
              ## ERROR 1: Unquoted Jinja2 variable
              name: {{ package_name }}
                      ^ here

    Solução: Abra webserver.yml e coloque a variável Jinja2 entre aspas duplas.

    nano webserver.yml

    Modifique a tarefa Install httpd package:

    ## ... (rest of the file)
    tasks:
      - name: Install httpd package
        ansible.builtin.dnf:
          ## FIX: Quote the Jinja2 expression
          name: "{{ package_name }}"
          state: present
    ## ... (rest of the file)

    Salve e saia. A verificação de sintaxe agora deve passar.

  4. Identificar e Corrigir o Erro de Caminho do Template

    Agora que a sintaxe está correta, tente executar o playbook.

    ansible-playbook webserver.yml

    Saída Esperada (Erro): O playbook falhará, mas desta vez é um erro de tempo de execução, não um erro de sintaxe. A mensagem de erro afirma claramente que o arquivo de origem index.j2 não pôde ser encontrado.

    TASK [Create a test index page from template] **********************************
    fatal: [localhost]: FAILED! => {"changed": false, "msg": "Could not find or access '/home/labex/project/ansible_troubleshooting/index.j2' on the Ansible Controller."}

    Isso acontece porque o parâmetro src em seu playbook aponta para index.j2, mas o arquivo que você criou é nomeado index.html.j2.

    Solução: Abra webserver.yml mais uma vez e corrija o nome do arquivo.

    nano webserver.yml

    Modifique o parâmetro src na tarefa Create a test index page from template:

    ## ... (rest of the file)
    - name: Create a test index page from template
      ansible.builtin.template:
        ## FIX: Correct template source filename
        src: index.html.j2
        dest: /var/www/html/index.html
    ## ... (rest of the file)

    Salve e saia do editor.

  5. Executar o Playbook com Sucesso

    Execute o playbook novamente. Ele agora deve concluir todas as tarefas com sucesso.

    ansible-playbook webserver.yml

    Saída Esperada (Sucesso):

    PLAY [Configure Web Server] ****************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [localhost]
    
    TASK [Install httpd package] ***************************************************
    changed: [localhost]
    
    TASK [Create a test index page from template] **********************************
    changed: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Usar Modo de Verificação para Solucionar Erros de Serviço em Hosts Gerenciados

Nesta etapa, você aprenderá a usar um dos recursos de solução de problemas mais poderosos do Ansible: o Modo de Verificação (Check Mode). O modo de verificação (ativado com o sinalizador --check) permite executar um playbook para ver quais alterações seriam feitas, sem modificar nada no sistema. Isso é incrivelmente útil para testar playbooks com segurança e diagnosticar problemas, como nomes de serviço incorretos, antes que causem problemas reais.

  1. Criar um Playbook para Gerenciar um Serviço

    Você criará agora um novo playbook, service.yml, projetado para garantir que o serviço do servidor web httpd esteja em execução. No entanto, você usará intencionalmente um nome de serviço incorreto para simular um erro comum.

    Use nano para criar o arquivo service.yml em seu diretório ~/project/ansible_troubleshooting.

    nano service.yml

    Copie e cole o seguinte conteúdo. Observe que o nome do serviço está definido como apache2, que é um nome comum para o servidor web Apache em outras distribuições Linux, mas está incorreto para RHEL.

    ---
    - name: Manage Web Server Service
      hosts: localhost
      become: true
      tasks:
        - name: Ensure web server service is started
          ansible.builtin.service:
            ## ERROR: Incorrect service name for RHEL
            name: apache2
            state: started
            enabled: true

    Salve o arquivo e saia do nano (Ctrl+X, Y, Enter).

  2. Usar o Modo de Verificação para Identificar o Erro de Serviço

    Em vez de executar o playbook normalmente, execute-o em modo de verificação. Isso impedirá que o Ansible faça quaisquer alterações, mas permitirá que ele verifique o estado do sistema e relate o que faria.

    ansible-playbook --check service.yml

    Saída Esperada (Erro): O playbook falhará. A mensagem de erro indicará claramente que não foi possível encontrar um serviço chamado apache2. Isso informa imediatamente que o parâmetro name em seu playbook está incorreto.

    TASK [Ensure web server service is started] ************************************
    fatal: [localhost]: FAILED! => {"changed": false, "msg": "Could not find the requested service 'apache2': host"}
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
  3. Encontrar o Nome Correto do Serviço

    Para corrigir o playbook, você precisa encontrar o nome correto do serviço para o pacote httpd no RHEL. Uma maneira confiável de fazer isso é listar os arquivos instalados pelo pacote e procurar pelo arquivo de unidade de serviço, que normalmente reside em /usr/lib/systemd/system/.

    Use o comando rpm para consultar o pacote httpd:

    rpm -ql httpd | grep systemd

    Saída Esperada: Este comando listará os arquivos relacionados ao systemd, incluindo o arquivo de serviço.

    /usr/lib/systemd/system/httpd.service
    /usr/lib/systemd/system/httpd@.service
    ...

    A saída httpd.service informa que o nome correto do serviço é httpd.

  4. Corrigir o Playbook e Reexecutar em Modo de Verificação

    Agora que você sabe o nome correto do serviço, edite o arquivo service.yml.

    nano service.yml

    Altere o name do serviço de apache2 para httpd.

    ## ... (rest of the file)
    - name: Ensure web server service is started
      ansible.builtin.service:
        ## FIX: Correct service name for RHEL
        name: httpd
        state: started
        enabled: true

    Salve e saia do editor. Agora, execute o playbook em modo de verificação novamente.

    ansible-playbook --check service.yml

    Saída Esperada (Sucesso em Modo de Verificação): Desta vez, o playbook deverá relatar um status changed. No modo de verificação, changed significa "uma alteração teria sido feita se esta fosse uma execução real". Isso indica que a lógica do seu playbook agora está correta e o Ansible identificou que o serviço httpd precisa ser iniciado.

    TASK [Ensure web server service is started] ************************************
    changed: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

    Observação: Neste ambiente de laboratório específico baseado em contêiner, um sistema de inicialização systemd completo não está em execução. Embora o modo de verificação funcione corretamente, uma execução normal do módulo ansible.builtin.service ainda pode encontrar problemas. A lição principal aqui é usar o modo de verificação para validar a lógica do seu playbook em relação à configuração do sistema.

Corrigir Configuração de Firewall e Problemas de Inalcançabilidade de Host

Nesta etapa final, você abordará dois problemas críticos de tempo de execução: falhas causadas por configurações incorretas do sistema, como o firewall, e problemas de conectividade resultantes de erros no seu arquivo de inventário Ansible. Dominar estes o ajudará a resolver alguns dos obstáculos mais comuns na automação.

Parte 1: Correção da Configuração do Firewall

Uma tarefa comum na configuração de servidores é abrir portas no firewall. Um playbook pode falhar facilmente se ele se referir a um serviço de firewall que não existe no sistema de destino.

  1. Instalar e Preparar firewalld

    Primeiro, certifique-se de que o pacote firewalld esteja instalado, pois ele fornece o serviço de gerenciamento de firewall no RHEL.

    sudo dnf install -y firewalld

    Inicie o serviço firewalld.

    sudo systemctl start firewalld

    Você também precisa instalar a coleção ansible.posix, que contém o módulo firewalld usado neste exercício.

    ansible-galaxy collection install ansible.posix

    Observação: Você pode ver um aviso sobre a compatibilidade da versão do Ansible, mas a coleção ainda funcionará corretamente para este exercício.

  2. Criar um Playbook com um Erro de Firewall

    Crie um novo playbook chamado firewall.yml que tenta habilitar o serviço http. No entanto, você usará intencionalmente um nome de serviço incorreto, web, para acionar um erro.

    nano firewall.yml

    Copie e cole o seguinte conteúdo no editor:

    ---
    - name: Configure System Firewall
      hosts: localhost
      become: true
      tasks:
        - name: Allow web traffic through firewall
          ansible.posix.firewalld:
            ## ERROR: 'web' is not a standard firewalld service
            service: web
            permanent: true
            state: enabled

    Salve e saia do nano (Ctrl+X, Y, Enter).

  3. Executar o Playbook e Diagnosticar a Falha

    Execute o playbook. Ele falhará porque o firewalld não reconhece um serviço chamado web.

    ansible-playbook firewall.yml

    Saída Esperada (Erro): A mensagem de erro afirma claramente que web não é um serviço suportado, apontando diretamente para o problema.

    TASK [Allow web traffic through firewall] **************************************
    fatal: [localhost]: FAILED! => {"changed": false, "msg": "web is not a supported service. This is what I have."}
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
  4. Encontrar o Nome Correto do Serviço de Firewall

    Para encontrar a lista de nomes de serviço válidos e predefinidos, você pode usar a ferramenta de linha de comando firewall-cmd.

    firewall-cmd --get-services

    Saída Esperada: Você verá uma longa lista de serviços disponíveis. Procure na lista para encontrar o correto para tráfego web, que é http.

    RH-Satellite-6 ... ftp http https imaps ipp ipp-client ...
  5. Corrigir o Playbook e Executar com Sucesso

    Edite firewall.yml e substitua o nome de serviço incorreto web pelo correto, http.

    nano firewall.yml

    A tarefa corrigida deve ficar assim:

    ## ... (rest of the file)
    - name: Allow web traffic through firewall
      ansible.posix.firewalld:
        ## FIX: Use the correct firewalld service name
        service: http
        permanent: true
        state: enabled

    Salve e saia. Agora, execute o playbook novamente. Ele deverá ser concluído com sucesso.

    ansible-playbook firewall.yml

Parte 2: Solução de Problemas de Inalcançabilidade do Host

Um erro de "unreachable" (inalcançável) significa que o Ansible não consegue se conectar a um host listado em seu inventário. Isso geralmente é causado por um simples erro de digitação no nome do host.

  1. Simular um Host Inalcançável

    Introduza intencionalmente um erro de digitação no seu arquivo inventory e remova a configuração de conexão local. Isso forçará o Ansible a tentar uma conexão de rede real com o nome de host digitado incorretamente.

    nano inventory

    Altere localhost para localhossst e remova ansible_connection=local.

    ## ERROR: Intentional typo in hostname, no local connection
    localhossst

    Salve e saia do editor.

  2. Modificar o Playbook para Usar Hosts do Inventário

    Primeiro, você precisa modificar o playbook webserver.yml para usar os hosts do inventário em vez do localhost codificado. Quando um playbook usa hosts: localhost, o Ansible o trata como um caso especial e ignora o arquivo de inventário completamente.

    nano webserver.yml

    Altere a linha hosts de localhost para all:

    ---
    - name: Configure Web Server
      hosts: all ## Changed from 'localhost' to use inventory hosts
      become: true
      ## ... rest of the playbook remains the same

    Salve e saia do editor.

  3. Executar o Playbook para Acionar o Erro

    Agora tente executar o playbook modificado. Ele falhará porque o inventário contém o erro de digitação localhossst.

    ansible-playbook webserver.yml

    Saída Esperada (Erro): O Ansible falhará e relatará o host como UNREACHABLE. A mensagem de erro indica que o nome do host não pôde ser resolvido.

    PLAY [Configure Web Server] ****************************************************
    
    TASK [Gathering Facts] **********************************************************
    fatal: [localhossst]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname localhossst: Name or service not known", "unreachable": true}
    
    PLAY RECAP *********************************************************************
    localhossst                : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0
  4. Corrigir o Arquivo de Inventário

    O status UNREACHABLE é o seu sinal para verificar novamente os nomes dos hosts e a conectividade de rede. Neste caso, a correção é corrigir o erro de digitação no arquivo inventory.

    nano inventory

    Altere localhossst de volta para localhost.

    ## FIX: Corrected hostname
    localhost ansible_connection=local

    Salve e saia. Executar ansible-playbook webserver.yml novamente agora terá sucesso.

  5. Opcional: Restaurar o Playbook Original

    Se você quiser restaurar o playbook para usar hosts: localhost para exercícios futuros, você pode alterá-lo de volta:

    nano webserver.yml

    Altere a linha hosts de volta para localhost:

    ---
    - name: Configure Web Server
      hosts: localhost ## Restored to original
      become: true
      ## ... rest of the playbook

    Salve e saia. Esta etapa demonstra a diferença entre usar localhost codificado (que ignora o inventário) versus usar hosts definidos no inventário.

Resumo

Neste laboratório, você preparou um ambiente Red Hat Enterprise Linux para o Ansible instalando o ansible-core e configurando o registro (logging), e em seguida procedeu para solucionar uma variedade de problemas comuns. Você aprendeu a diagnosticar e resolver erros dentro de playbooks, como corrigir sintaxe YAML incorreta, indentação, aspas Jinja2 e caminhos de template inválidos. Essas habilidades são fundamentais para escrever código de automação válido e confiável.

Além disso, você abordou problemas relacionados ao ambiente do host gerenciado. Você utilizou o modo de verificação (check mode) do Ansible para executar com segurança um teste (dry run) e identificar potenciais falhas de serviço em um nó de destino sem fazer alterações reais. O laboratório concluiu abordando problemas de conectividade, onde você corrigiu configurações de firewall para resolver a inalcançabilidade do host, fornecendo uma abordagem abrangente para depuração do nó de controle ao host gerenciado.