Ansible失败任务,但继续运行

时间:2020-02-14 16:09:48

标签: ansible

我目前正在为Ansible写一堆支票。

它涉及联系远程计算机并执行检查。

根据检查结果,我决定是否失败。

这是重要的一点:任务本身永远不会失败。它仅返回一条消息。我注册结果,然后进行分析。然后,基于此,我确定是不是失败。

问题是,我想添加一个标志,该标志允许测试继续运行而不是失败。

所以代码看起来像这样:

- name: Check fail.
  fail:
    msg: "Test failed"
  when: "failfast_flag and <the actual check>"

存在的问题是,如果我使failfast_flag false,它不再输出红色。

在这种情况下,我希望它继续进行下一个测试,但是我也希望它显示为红色,表明它是错误/失败。

我该怎么做?

编辑:感谢您的建议,我将尝试一下。

2 个答案:

答案 0 :(得分:0)

不确定我是否完全理解您的问题,但是您可以使用- blockrescue结构来处理故障并在出现故障的情况下继续使用手册:

示例:

- block:
    - name: Check fail.
      fail:
      msg: "Test failed"
      when: "failfast_flag and <the actual check>"
  rescue:
    - name: do somthing when the task above fails
      command: <do somthing>

答案 1 :(得分:0)

这是@edrupado的答案和@Jack的评论的组合。

这个想法是将错误移到您注册该值的任务上,并使用抢救块通过一条提示消息使失败,并通过标志跳过失败。

我不知道您收集数据的实际任务是什么。我使用一个虚拟示例来检查目录/文件的存在。您应该能够适应实际情况。

---
- name: Dummy POC just to test feasability
  hosts: localhost
  gather_facts: false

  tasks:

    - block:

        - name: Make sure /whatever dir exists
          stat:
            path: /whatever
          register: whatever
          failed_when: not whatever.stat.exists | bool

        - debug:
            msg: "/whatever exists: Good !"

      rescue:

        - fail:
            msg: /whatever dir must exist.
          ignore_errors: "{{ ignore_flag | default(false) | bool }}"

    - block:

        - name: Make sure /tmp dir exists
          stat:
            path: /tmp
          register: tmpdir
          failed_when: not tmpdir.stat.exists | bool

        - debug:
            msg: "/tmp exists: Good !"

      rescue:

        - fail:
            msg: /tmp dir must exist.
          ignore_errors: "{{ ignore_flag | default(false) | bool }}"

哪个给:

$ ansible-playbook /tmp/test.yml

PLAY [Dummy POC just to test feasability] *************************************************************************************************************************************************************************

TASK [Make sure /whatever dir exists] *****************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "failed_when_result": true, "stat": {"exists": false}}

TASK [fail] *******************************************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "/whatever dir must exist."}

PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=1    ignored=0

$ ansible-playbook /tmp/test.yml -e ignore_flag=true

PLAY [Dummy POC just to test feasability] *************************************************************************************************************************************************************************

TASK [Make sure /whatever dir exists] *****************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "failed_when_result": true, "stat": {"exists": false}}

TASK [fail] *******************************************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "/whatever dir must exist."}
...ignoring

TASK [Make sure /tmp dir exists] **********************************************************************************************************************************************************************************
ok: [localhost]

TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "/tmp exists: Good !"
}

PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=1    ignored=1