在处理程序中使用块 - Ansible

6 ansible

我正在为 Ansible 角色编写一个处理程序来停止和启动 Docker。停止在handlers/main.yml中写如下

- name: stop docker
  block:
    - name: stop docker (Debian based)
      block:
        - name: stop service docker on debian, if running
          systemd: name=docker state=stopped
        - name: stop service docker.socket on debian, if running
          systemd: name=docker.socket state=stopped
      when: ansible_pkg_mgr == "apt"
  
    - name: stop docker (CentOS based)
      block:
        - name: stop service docker on CentOS, if running
          service:
            name: docker
            state: stopped
        - name: stop service docker.socket on CentOS, if running
          service:
            name: docker
            state: stopped
      when: ansible_pkg_mgr == "yum"
Run Code Online (Sandbox Code Playgroud)

然后在我的任务/主文件中,我调用 stop docker

---
- name: test
  command: echo "Stopping docker" 
  notify:
    - stop docker
Run Code Online (Sandbox Code Playgroud)

我收到的错误是ERROR! Unexpected Exception, this is probably a bug: 'Block' object has no attribute 'notified_hosts'

如果我将其作为剧本中的任务运行,它就可以工作。

block有没有办法在 Ansible 处理程序中使用?

U88*_*80D 8

根据您的错误消息,Ansible 似乎不block提供handlers.

相反,你可以使用其他方法

handlers:
  - name: Stop Docker
    include_tasks: tasks/stop_docker.yaml
Run Code Online (Sandbox Code Playgroud)

并将逻辑放入单独的任务文件中。

更多信息