让ansible运行脚本而没有退出代码停止ssh连接

时间:2017-06-13 15:30:09

标签: shell ssh ansible

我们有一个ansible任务,如下所示

- name: Check if that created
  script: verification.sh
  register: verification
  changed_when: verification.rc == 1

上述任务运行一个脚本,如果失败或成功则返回退出信号。一个示例部分是

    if [[ "$item" == "$name" ]]; then
        printf "TEST"
        exit 1
    fi

如果问题是当返回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"]}

然而,当我们在脚本

中返回0的退出信号时,这是有效的

我猜这是因为“exit”在远程主机上运行,​​然后它终止了ssh连接。

我们如何绕过这一点并在没有错误的情况下返回退出信号。

2 个答案:

答案 0 :(得分:5)

您可以使用failed_when来控制what defines failure

- name: Check if that created
  script: verification.sh
  register: verification
  changed_when: verification.rc == 1
  failed_when: verification.rc not in [0,1]

当退出代码不是0和1时,这将导致失败。

答案 1 :(得分:1)

  

通常,Playbooks将停止在主机上执行更多步骤   任务失败。但有时候,你想继续。为此,   写一个看起来像这样的任务:

http://docs.ansible.com/ansible/playbooks_error_handling.html#ignoring-failed-commands Ignoring Failed Commands

- name: Check if that created
  script: verification.sh
  register: verification
  changed_when: verification.rc == 1
  ignore_errors: yes