Ansible区块:重新引发`rescue`区块中的错误

时间:2019-11-25 12:02:39

标签: error-handling ansible

我是Ansible的新手,所以我可能不正确地使用此方法,但是我试图找到一种方法,一旦错误rescue被一个块塞住,就会重新引发该错误。

这样做的目的是能够在终止剧本之前将失败的任务记录到API。我将使用always部分,但随后不会填充ansible_failed_taskansible_failed_result变量。

我非常有信心自己的方法是错误的,那么经验丰富的Ansible开发人员将如何处理呢?谢谢!

2 个答案:

答案 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}}