我是Ansible的新手,所以我可能不正确地使用此方法,但是我试图找到一种方法,一旦错误rescue
被一个块塞住,就会重新引发该错误。
这样做的目的是能够在终止剧本之前将失败的任务记录到API。我将使用always
部分,但随后不会填充ansible_failed_task
和ansible_failed_result
变量。
我非常有信心自己的方法是错误的,那么经验丰富的Ansible开发人员将如何处理呢?谢谢!
答案 0 :(得分:1)
如果我正确理解了您要做什么,这是我将如何进行管理的基本(非功能性)说明。关键是在按照您希望的方式处理错误之后,在抢救阶段使用fail
module结束剧本。
- name: handle error nicely in my block
block:
- name: This is my task that can fail
debug:
msg: "I'm a a task that can fail"
register: some_var
rescue:
- name: Do whatever you need to log the failure
debug:
msg: "I'm a log task playing around with some_var: {{ some_var }}"
- name: fail the playbook as the task was not successful
fail:
msg: "The task was not successful. Aborting"
这种情况是否符合您的期望?
答案 1 :(得分:0)
来自ansible documentation(请参阅最后一节)
2.1版中的新功能。
Ansible为块的救援部分中的任务提供了几个变量:
- ansible_failed_task 返回“失败”并触发救援的任务。例如,要获取名称>使用ansible_failed_task.name。
- ansible_failed_result 触发救援的失败任务的捕获返回结果。这将等于在register关键字中使用了此var。
所以这是一个例子:
- name: expample
hosts: localhost
become: no
gather_facts: no
tasks:
- block:
- debug:
msg: some random task
- name: a failing task
fail:
msg: "i failed "
rescue:
- debug:
msg: the failed task in the block is {{ ansible_failed_task }}. the result of the task is {{ansible_failed_result}}