在没有退出代码停止ssh连接的情况下让ansible运行脚本

Mil*_*daD 3 ssh shell ansible

我们有一个艰巨的任务,如下所示

- 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连接。

我们如何绕过这个问题并返回退出信号而不会出现错误。

Kon*_*rov 6

您可以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时,这将导致失败。