【问题标题】:Having ansible run a script without the exit code stopping the ssh connection在没有退出代码的情况下运行脚本并停止 ssh 连接
【发布时间】:2021-05-26 16:24:30
【问题描述】:

我们有一个类似下面的 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 连接。

我们如何绕过这个并在不出现错误的情况下返回退出信号。

【问题讨论】:

    标签: shell ssh ansible


    【解决方案1】:

    你可以使用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 时,这将失败。

    【讨论】:

      【解决方案2】:

      通常,剧本将停止在主机上执行任何更多步骤 有一个任务失败。但是,有时您想继续前进。为此, 编写一个如下所示的任务:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-27
        • 1970-01-01
        • 1970-01-01
        • 2016-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多