有没有办法在收到通知后取消处理程序?
Is there a way to cancel a handler after it was notified?
我有一个由一堆 docker 化的微应用程序组成的环境,其中一些相互依赖,相互链接并通过 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 但这只是执行通知的处理程序,而不是我需要的。
您可以在处理程序中使用条件。
使用标志变量来指示某些处理程序不应执行。
- name: restart myapp1
shell: docker ...
when: not block_apps_restart
我有一个由一堆 docker 化的微应用程序组成的环境,其中一些相互依赖,相互链接并通过 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 但这只是执行通知的处理程序,而不是我需要的。
您可以在处理程序中使用条件。
使用标志变量来指示某些处理程序不应执行。
- name: restart myapp1
shell: docker ...
when: not block_apps_restart