Ansible - 失败时继续(而不是忽略)

Ansible - 失败时继续(而不是忽略)

我知道这个ignore_errors: yes标志,可以忽略剧本运行期间的失败,但我想知道 Ansible 中是否有我可以设置的东西,这不是“忽略行为”,但仍然运行剧本直到结束。那是因为我想要更好的报告控制。

为了说明这一点,目前这是我的“运行回顾”:

PLAY RECAP *******************************************************************************************************************************************************************************************
<server>                  : ok=195  changed=0    unreachable=0    failed=0    skipped=0    rescued=0    **ignored=10**

“ignored=10”实际上是“失败的检查”我需要的是这样的重述:

PLAY RECAP *******************************************************************************************************************************************************************************************
<server>                  : ok=195  changed=0    unreachable=0    **failed=10**    skipped=0    rescued=0    ignored=0

答案1

关于你的问题

如果 Ansible 中有任何我可以设置的内容,那不是“忽略行为”,而是仍然运行剧本直到结束。

你可以看看playbook 中的错误处理失败的定义作为

Ansible 允许您使用条件定义每个任务中“失败”的含义failed_when

还有block使用s处理错误

答案2

您可以使用的一种策略是忽略错误,但将失败条件存储在变量中,并将该变量的状态断言为剧本中的最后一个任务。那样:

  • 无论是否失败,您的所有任务都将被尝试
  • 如果您的任何任务失败,整个剧本都会失败,因此您将在最后的报告中看到成功或失败,并且如果需要,可以使用命令的返回代码
  • 默认情况下,任务失败会以红色突出显示,即使它们被忽略,因此它们的消息很容易在 playbook 输出中找到。
  • 这也适用于循环,因为注册的输出有自己的failed属性来标记是否有任何循环项失败。

例如:

  - set_fact:
      global_fail: false

  - name: Assert the state of something
    ansible.builtin.assert:
      that:
        - <condition you want to assert>
      success_msg: ...
      fail_msg: ...
    register: assert_task
    ignore_errors: true

  - set_fact:
      global_fail: "{{ global_fail or (assert_task.failed is defined and assert_task.failed) }}"

  <Further tasks here>

  - name: Assert that no tasks failed
    ansible.builtin.assert:
      that:
        - not global_fail
      success_msg: "All tasks succeeded"
      fail_msg: "One or more tasks failed"





相关内容