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

are*_* na 6 listener handler ansible

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

我有以下目录结构:

<project>
  - playbook.yml
  - <roles>
  -<handler>
     - main.yml
  -<meta>
  -<tasks>
      -main.yml
Run Code Online (Sandbox Code Playgroud)

问题是处理程序从未被调用。

tasks/main.yml:

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


handler/main.yml:

   - name: tested
     register: val1
     listen: "test me now"
Run Code Online (Sandbox Code Playgroud)

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

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

Vla*_*tka 8

下面的戏剧按预期进行

- hosts: all
  tasks:
    - include_tasks: tasks/main.yml
    - meta: flush_handlers
    - debug:
        var: val1.stdout
  handlers:
    - import_tasks: handlers/main.yml
Run Code Online (Sandbox Code Playgroud)
  • 当任务通知处理程序,必须导入处理程序才能出现
  • 可以包含或导入任务
  • 如果你想在playbook中使用变量val1,则需要flush_handlers

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

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

在handler/main.yml中使用一些模块。例如:

- name: tested
  command: "echo 'running handler'"
  register: val1
  listen: "test me now"
Run Code Online (Sandbox Code Playgroud)

运行这样的游戏可以给

  val1.stdout: running handler
Run Code Online (Sandbox Code Playgroud)

用于测试的完整剧本示例

shell> cat playbook.yml 
- hosts: localhost
  tasks:
    - include_tasks: tasks/main.yml
  handlers:
    - import_tasks: handlers/main.yml
Run Code Online (Sandbox Code Playgroud)
shell> cat tasks/main.yml
- command: date
  register: result
  notify: test me now
Run Code Online (Sandbox Code Playgroud)
shell> cat handlers/main.yml
- name: test me now
  debug:
    msg: "{{ result.stdout }} Running handler."
Run Code Online (Sandbox Code Playgroud)

给出

shell> ansible-playbook playbook.yml 

PLAY [localhost] *****************************************************************************

TASK [Gathering Facts] ***********************************************************************
ok: [localhost]

TASK [include_tasks] *************************************************************************
included: /export/scratch/tmp8/test-801/tasks/main.yml for localhost

TASK [command] *******************************************************************************
changed: [localhost]

RUNNING HANDLER [test me now] ****************************************************************
ok: [localhost] => 
  msg: Mon 25 Apr 2022 04:59:02 PM CEST Running handler.

PLAY RECAP ***********************************************************************************
localhost: ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
Run Code Online (Sandbox Code Playgroud)