Ansible 处理程序没有开火?

Ansible handlers are not firing?

我是 Ansible(运行 版本 2.2.1.0)的新手,所以到目前为止我一直在遵循基本的目录结构。最近我试图将一些任务移动到 handlers 区域,但我遇到了一些奇怪的行为。

我的树结构如下:

host_inventory
host_vars
site.yml
roles
  common
    handlers
      main.yml
    meta
      main.yml
    tasks
      main.yml
    vars
      main.yml

真的只有两个相关文件(我认为)。

此版本的 tasks/main.yml 确实调用了处理程序:

角色/公共/tasks/main.yml:

---
  - name: make test file
    shell: "touch /home/hello"
    notify: say goodbye

并在 roles/common/handlers/main.yml:

---
  - name: say goodbye
    shell: "touch /home/goodbye"

这不会调用处理程序:

角色/通用/tasks/main.yml

---
  - name: test for file
    stat:
      path: /home/hello
    notify: say goodbye

roles/common/handlers/main.yml

---
  - name: say goodbye
    shell: "echo something"

我不明白为什么我的 stat 任务没有调用它们的处理程序。

任何人都可以提供一些见解吗?我觉得我错过了一些明显的东西。

仅当任务状态为 changed 时才会通知处理程序。
在您的示例中,shell 任务始终处于 changed 状态,但 stat 任务始终处于 ok 状态。

有关详细信息,请参阅 documentation