有没有办法在通知后取消处理程序?

时间:2016-09-01 12:09:51

标签: ansible docker-compose ansible-playbook notify

我有一个由一堆dockerized microapps组成的环境,其中一些依赖于其他的,相互链接并通过docker接口上的http进行通信。我的问题是docker-compose仅跟踪了docker-compose.yml文件并且仅在docker-compose.yml被更改时才重新创建容器。 有了ansible,我终于可以开始跟踪配置文件,这些配置文件作为卷安装在容器中,因此它们可以从模板中部署 - 这非常有效。

在我以前运行的ansible之前:

 docker-compose stop <app> && docker-compose rm -f <app> && docker-compose up -d
当我知道已经更改了已安装的文件并且需要刷新卷时,

刷新单个应用程序。

我已经为每个应用程序使用docker_service模块定义了多个角色,每个应用程序都有自己的处理程序,当收到通知时,会运行上面的代码,以刷新该特定的应用程序。

问题是,当多个应用程序更新了挂载的文件时,ansible会通知每个处理程序并且每个处理程序都会被执行,这与我需要的情况不同,因为当主容器(其他人依赖于其中)重新创建其他人时需要因为它们已经被重新创建,但它们的处理程序也正在被执行。所以我的问题是:有没有办法取消通知的处理程序?我知道flush_handlers但是只执行通知的处理程序,而不是我需要的。

1 个答案:

答案 0 :(得分:6)

您可以在处理程序中使用条件 使用标志变量来指示某些处理程序不应该执行。

- name: restart myapp1
  shell: docker ...
  when: not block_apps_restart