我们有一个艰巨的任务,如下所示
- name: Check if that created
script: verification.sh
register: verification
changed_when: verification.rc == 1
Run Code Online (Sandbox Code Playgroud)
上面的任务运行一个脚本,如果失败或成功,该脚本将返回退出信号。一个示例部分是
if [[ "$item" == "$name" ]]; then
printf "TEST"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
问题在于当返回非0值的退出信号时,ansible中的ssh似乎终止,并给出错误消息为
TASK [Test Task] ******************
fatal: [default]: FAILED! => {"changed": true, "failed": true, "rc": 1, "stderr": "Shared connection to 127.0.0.1 closed.\r\n", "stdout": "TEST", "stdout_lines": ["TEST"]}
Run Code Online (Sandbox Code Playgroud)
但是,当我们在脚本中返回退出信号0时,此方法有效
我猜这是因为“退出”在远程主机上运行,然后它终止了ssh连接。
我们如何绕过这个问题并返回退出信号而不会出现错误。
您可以failed_when用来控制定义失败的内容:
- name: Check if that created
script: verification.sh
register: verification
changed_when: verification.rc == 1
failed_when: verification.rc not in [0,1]
Run Code Online (Sandbox Code Playgroud)
当退出代码不是0和1时,这将导致失败。