Ansible处理程序-未从救援块中调用

时间:2020-07-28 17:44:45

标签: ansible ansible-handlers

考虑以下(为简洁起见,减少了)剧本,其中有一个方块和一个救援方块

- name: deploy block
  block:
  - name: debug meta
    debug: var=meta

  
  - name: create/update configmap with new data
    k8s:
      state: present
      namespace: "{{ namespace }}"
      definition: "{{ lookup('template', 'configmap.tpl.yml') }}"
      kind: ConfigMap
    notify:
      - successfull_deployment_slack_handler
  rescue:
    - name: Something went wrong handler
      debug:
        msg: "Something has failed in the playbook"
      notify: failure_deployment_slack_handler
- meta: flush_handlers

在满意的路径中进行测试可以正常工作,并按预期方式调用处理程序。
但是当我在测试中未通过任务时,我确实看到了预期的调试消息,但是没有调用实际的处理程序(我已经将其换成调试消息以进行验证)。

是的,我尝试添加meta: flush_handlers

我该如何进行这项工作?

Ansible版本:2.9.9

2 个答案:

答案 0 :(得分:2)

在精简版剧本中的“错误”是debug永远不会报告为changed,因此处理程序不会触发。

在这本剧本中,我将rescue的{​​{1}}替换为debug,处理程序称为

shell

产生

---
- hosts: all
  handlers:
    - name: handler
      debug:
        msg: handler
  tasks:
    - name: deploy block
      block:
      - name: debug meta
        debug:
          msg: in the block

      - fail:
          msg: failing
      rescue:
        - name: Something went wrong handler
          shell: date
          notify: handler

答案 1 :(得分:0)

仅在发生更改时调用处理程序,任务meta: flush_handlers仅在首先要刷新的处理程序时才执行处理程序,而不是您的情况。 >

我们已经提到过,模块应该是幂等的,并且可以在远程系统上进行更改后进行中继。剧本认识到这一点,并具有基本的事件系统,可用于响应更改

来源:https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#handlers-running-operations-on-change,重点是我的

为了使其正常工作,您将不得不以某种方式创建更改后的状态。可以通过使用changed_when

- name: deploy block
  block:
  - name: debug meta
    debug: var=meta

  
  - name: create/update configmap with new data
    k8s:
      state: present
      namespace: "{{ namespace }}"
      definition: "{{ lookup('template', 'configmap.tpl.yml') }}"
      kind: ConfigMap
    notify:
      - successfull_deployment_slack_handler
  rescue:
    - name: Something went wrong handler
      debug:
        msg: "Something has failed in the playbook"
      changed_when: true
      notify: failure_deployment_slack_handler
- meta: flush_handlers

相关:https://stackoverflow.com/a/62183353/2123530