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.
-
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).
-
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.
-
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.
-
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.
-
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