Вы, вероятно, должны опубликовать всю свою книгу сразу за один блок кода, потому что в вставленных вами битах нет абсолютно никаких синтаксических проблем.
Между тем, если вы хотите выполнить свое требование, вы сначала должнычтобы понять, что по умолчанию ваша книга воспроизведения остановится, как только возникнет ошибка в задании. Таким образом, в вашем случае задачи fail
никогда не будут выполняться так, как они выполняются после невыполненной задачи.
Одним из способов решения этой проблемы является использование ignore_error
на вашемtask.
В большинстве случаев я считаю, что блоки и их функция обработки ошибок лучше подходят для таких сценариев.
- В приведенном ниже примере используется
block
. Я фальсифицировал вызов sql с помощью переменной playbook (которую можно изменить, чтобы поиграть) и задачи debug
, используя те же условия when
, что и у вас. - Я также изменил способ вызова
fail
так что вам нужно сделать это только один раз с фильтром ternary
. - Если вы не знакомы с нотацией
>-
в yaml, взгляните на определение скалярных блоков . Я использовал это, чтобы ограничить длину строки и облегчить чтение.
---
- hosts: localhost
gather_facts: false
vars:
command_result:
stdout: "775"
rc: "0"
tasks:
- block:
- name: Fake task to mimic sql query
debug:
var: command_result
failed_when: command_result.stdout is search('775') or command_result.rc != 0
rescue:
- name: Make Sure the mandatory input values are passed
fail:
msg: >-
{{
command_result.stdout is search('775') |
ternary(
"This REQ is already Deployed. Hence retry with a Unique Number.",
"Database is not reachable."
)
}}
, что дает:
PLAY [localhost] *********************************************************************
TASK [Fake task to mimic sql query] **************************************************
fatal: [localhost]: FAILED! => {
"command_result": {
"rc": "0",
"stdout": "775"
},
"failed_when_result": true
}
TASK [Make Sure the mandatory input values are passed] *******************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "This REQ is already Deployed. Hence retry with a Unique Number."}
PLAY RECAP ***************************************************************************
localhost : ok=0 changed=0 unreachable=0 failed=1 skipped=0 rescued=1 ignored=0