处理程序:在更改时运行操作

处理程序:在更改时运行操作

角色中可以有“后期任务”吗?即在角色中定义的任务,将在剧情结束时运行?

例如,我有一个common角色,大多数其他角色都依赖它。该common角色提供了一些基本内容以避免重复,例如对 yum 配置的调整等。

我注意到剧本有post_tasks。我想知道是否有可能在角色本身中定义岗位任务?


更新: 引用Ansible 文档

处理程序:在更改时运行操作

...

这些“通知”操作在剧本中每个任务块结束时触发,并且即使由多个不同的任务通知也只会触发一次。

...

角色将在后面描述。值得指出的是,处理程序会在“pre_tasks”、“roles”、“tasks”和“post_tasks”部分之间自动处理。

...

显然,文档的这一部分要么具有误导性,要么完全是谎言(=其中存在错误)。似乎处理程序被解雇了每场比赛结束时,在tasks和之间post_tasks,如以下简单测试所示:

- name:         Handlers test
  hosts:        all
  gather_facts: no
  roles:
    - some-role
    # some-role depends on common
  tasks:
    - name:  This a task
      shell: /bin/true
  post_tasks:
    - name:  This is a post task
      shell: /bin/true

以及共同的作用:

# tasks/main.yml

- name:   Registering handler
  shell:  /bin/true
  notify: this is a handler


#handlers/main.yml

- name:   this is a handler
  shell:  /bin/true

(由于没有人提供答案,我无法接受,但觉得用评论中的提示来回答我自己的问题不太合适……)

答案1

此行为是由 Ansible 1.9.x 中的一个错误引起的,目前在此处进行跟踪:https://github.com/ansible/ansible/issues/12575

相关内容