Lidar com Falhas de Script
Nesta etapa, você aprenderá como lidar com falhas de script ao executar scripts usando o módulo Script. Você lidará com casos em que o script retorna um status de saída diferente de zero, indicando uma falha.
Primeiro, modifique o arquivo de playbook existente removendo todo o conteúdo e adicionando o seguinte conteúdo ao arquivo do playbook:
- hosts: localhost
tasks:
- name: Execute a failing script
script: /home/labex/project/failing_script.sh
register: failing_script_output
ignore_errors: yes
- name: Handle script failure
debug:
msg: "The script failed. Performing fallback action."
when: failing_script_output.failed
script: Este é o comando real que a tarefa executará.
register: Isso registra a saída do script na variável "failing_script_output" para uso posterior no playbook.
ignore_errors: Este parâmetro é definido como yes para permitir que o Ansible continue executando tarefas subsequentes, mesmo que esta tarefa de script falhe. A falha será registrada na variável failing_script_output.
debug: Este é o módulo Ansible usado para imprimir informações de depuração.
msg: Este parâmetro para o módulo debug imprime uma mensagem indicando que o script falhou. Esta tarefa só será executada quando a tarefa anterior (failing_script_output) falhar.
when: Esta condição garante que esta tarefa seja executada somente quando o script na primeira tarefa falhar. Se o script for bem-sucedido, esta tarefa será ignorada.
Em resumo, este playbook tenta executar um script que pode falhar. Se o script falhar, o playbook lida com a falha imprimindo uma mensagem de depuração e executando uma ação de fallback. O parâmetro ignore_errors: yes permite que o playbook continue mesmo que o script falhe, e a condição when: failing_script_output.failed garante que a tarefa de tratamento seja executada somente quando necessário.
Em seguida, crie um arquivo de script com falha chamado /home/labex/project/failing_script.sh com o seguinte conteúdo:
#!/bin/bash
exit 1
Certifique-se de que o arquivo de script seja executável (chmod +x failing_script.sh) e coloque o arquivo de script no diretório /home/labex/project/ especificado no playbook.
Finalmente, execute o playbook e observe que o script com falha é executado, mas ignorado devido a ignore_errors: yes.
chmod +x failing_script.sh
ansible-playbook script-module-playbook.yaml
O playbook exibirá uma mensagem de depuração indicando a falha e executando uma ação de fallback.
Exemplo de saída:
...
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Execute a failing script] ************************************************
fatal: [localhost]: FAILED! => {"changed": true, "msg": "non-zero return code", "rc": 1, "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
...ignoring
TASK [Handle script failure] ***************************************************
ok: [localhost] => {
"msg": "The script failed. Performing fallback action."
}
PLAY RECAP *********************************************************************
localhost : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1
A mensagem "msg": "The script failed. Performing fallback action." indica que o script failing_script.sh falhou ao ser executado.