【问题标题】:Using Block in Handler - Ansible在处理程序中使用块 - Ansible
【发布时间】:2023-02-21 04:21:17
【问题描述】:

我正在为 Ansible 角色编写一个处理程序来停止和启动 Docker。 stop在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"

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

---
- name: test
  command: echo "Stopping docker" 
  notify:
    - stop docker

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

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

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

【问题讨论】:

    标签: ansible


    【解决方案1】:

    根据您的错误消息,Ansible 似乎没有为 handlers 提供 block 功能。

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

    handlers:
      - name: Stop Docker
        include_tasks: tasks/stop_docker.yaml
    

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

    更多信息

    【讨论】:

      【解决方案2】:

      对我来说,blockimport_tasks 都没有用(见https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html)。

      - name: do something else in somewhere else:
        include_tasks: roles/jh_load_services/tasks/main.yml
      

      如果这可以帮助

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多