我目前正在为Ansible写一堆支票。
它涉及联系远程计算机并执行检查。
根据检查结果,我决定是否失败。
这是重要的一点:任务本身永远不会失败。它仅返回一条消息。我注册结果,然后进行分析。然后,基于此,我确定是不是失败。
问题是,我想添加一个标志,该标志允许测试继续运行而不是失败。
所以代码看起来像这样:
- name: Check fail.
fail:
msg: "Test failed"
when: "failfast_flag and <the actual check>"
存在的问题是,如果我使failfast_flag false
,它不再输出红色。
在这种情况下,我希望它继续进行下一个测试,但是我也希望它显示为红色,表明它是错误/失败。
我该怎么做?
编辑:感谢您的建议,我将尝试一下。
答案 0 :(得分:0)
不确定我是否完全理解您的问题,但是您可以使用- block
和rescue
结构来处理故障并在出现故障的情况下继续使用手册:
示例:
- 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