Lidar com Falhas de Comando
Nesta etapa, você aprenderá como lidar com falhas de comando ao executar comandos shell usando o módulo Shell. Você lidará com casos em que o comando shell retorna um status de saída diferente de zero, indicando uma falha.
Primeiro, complete o arquivo /home/labex/project/handle_command_failure.yml.
Adicione o seguinte conteúdo ao arquivo playbook:
- name: Handle Command Failure
hosts: localhost
gather_facts: false
tasks:
- name: Execute a failing command
shell: failing-command
register: failing_command_output
ignore_errors: yes
- name: Handle command failure
debug:
msg: "The command failed. Performing fallback action."
when: failing_command_output.failed
hosts: localhost: O host de destino para executar este playbook Ansible é localhost.
shell: failing-command: Esta linha usa o módulo shell para executar o comando failing-command. A saída deste comando será capturada e armazenada na variável failing_command_output. Como o script failing-command não existe, este comando deve falhar.
ignore_errors: yes: Esta linha instrui o Ansible a ignorar quaisquer erros que ocorram durante a execução do failing-command. Isso permite que o playbook continue a ser executado mesmo que o comando falhe.
debug: Este módulo usa o módulo debug para exibir uma mensagem que diz "The command failed. Performing fallback action." (O comando falhou. Executando ação de fallback.) Esta mensagem só será exibida quando a condição failing_command_output.failed for atendida, indicando que a execução do comando anterior falhou.
Em resumo, o playbook tenta executar um comando que deve falhar, ignora quaisquer erros que ocorram durante sua execução e, em seguida, exibe uma mensagem indicando que o comando falhou e uma ação de fallback será tomada com base no status de falha do comando.
Em seguida, exiba a saída do comando no playbook Ansible.
ansible-playbook /home/labex/project/handle_command_failure.yml
Exemplo de saída:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [Handle Command Failure] **************************************************
TASK [Execute a failing command] ***********************************************
fatal: [localhost]: FAILED! => {"changed": true, "cmd": "failing-command", "delta": "0:00:00.009169", "end": "2024-03-08 13:46:22.701946", "msg": "non-zero return code", "rc": 127, "start": "2024-03-08 13:46:22.692777", "stderr": "/bin/sh: line 1: failing-command: command not found", "stderr_lines": ["/bin/sh: line 1: failing-command: command not found"], "stdout": "", "stdout_lines": []}
...ignoring
TASK [Handle command failure] **************************************************
ok: [localhost] => {
"msg": "The command failed. Performing fallback action."
}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1
A presença de "msg": "The command failed. Performing fallback action." indica que a execução deste comando failing-command falhou.