包括来自不同文件的处理程序

时间:2019-04-08 09:43:15

标签: ansible listener handler

我的处理程序不是由剧本或任务运行的

我具有以下目录结构:

<project>
  - playbook.yml
  - <roles>
  -<handler>
     - main.yml
  -<meta>
  -<tasks>
      -main.yml

问题是永远不会调用处理程序。

tasks/main.yml:

  - name: run task1
    command: run_task
    notify: "test me now"


handler/main.yml:

   - name: tested
     register: val1
     listen: "test me now"

剧本仅调用task / main.yml并具有host:all

我是否需要包含/导入?我在剧本中尝试过,但没有帮助

2 个答案:

答案 0 :(得分:0)

以下播放方式有效

  tasks:
    - include_tasks: tasks/main.yml
    - meta: flush_handlers
    - debug: var=val1.stdout
   handlers:
    - import_tasks: handlers/main.yml
  • 处理程序必须导入,以便在 task 通知它时出现。
  • 任务可以包括或导入。

handler / main.yml 中缺少模块。这将导致:

  

错误!在任务中未检测到任何操作。这通常表示拼写错误的模块名称或错误的模块路径。

使用 handler / main.yml 中的某些模块。例如:

- name: tested
  command: "echo 'running handler'"
  register: val1
  listen: "test me now"

运行这样的游戏可以得到:

val1.stdout: running handler

答案 1 :(得分:0)

您应具有https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html中描述的结构,因此该目录应称为handlers(而不是handler