我正在寻找一种方法来获取列表(可能是一个ansible系统变量),其中包含由剧本触发的当前处理程序通知。
换句话说,在角色的某个时刻,我想向一个任务添加一个“when”条件,该任务将测试是否还没有发送“重启通知” - >重新启动不在通知列表中时执行此任务
有什么想法吗?
非常感谢!
答案 0 :(得分:0)
退一步说,你处于需要以这种方式重新启动某些东西的情况似乎很奇怪。如果您没有进行任何更改,为什么要重新启动呢?如果您已经进行了更改,为什么不在任何正在进行更改的任务上注册通知?
在任何情况下,对于您想要做的事情,似乎最简单的解决方案就是提出通知:
- debug:
msg: ensure that handler myhandler is notified
changed_when: "force_change|default('false')|bool"
notify: myhandler
这将注册myhandler
的通知,如果先前的任务是否已注册通知也无关紧要:在任何一种情况下,myhandler
处理程序将在结束时触发一次该剧。
答案 1 :(得分:0)
我终于找到了一个完全可以接受的解决方案。
我使用处理程序设置事实,使用另一个处理程序来执行重启。我将它们与listen参数关联到同一通知。
此外,只有在未定义该事实或将其设置为false时,重新加载处理程序才会执行重新加载。
- name: Register restart Logstash
set_fact:
restart_notified: true
listen: "Restart Logstash"
- name: Restart Logstash service
systemd:
name: logstash
daemon_reload: true
state: restarted
listen: "Restart Logstash"
- name: Reload Logstash
systemd:
name: logstash
daemon_reload: true
state: reloaded
when: restart_notified is not defined or not restart_notified
然后我在需要的地方使用Restart Logstash
或Reload Logstash
,只执行一次,重启或重新加载,但从不同时使用。
答案 2 :(得分:0)
类似的解决方案,使用寄存器代替set_fact。
tasks:
- name: some tasks, which maybe trigger "restart notification"
# ...
- name: trigger reload handler always
debug:
msg: always trigger handler
changed_when: true
notify: reload notification
handlers:
- name: restart notification
debug:
register: restartNotificationHandler
- name: reload notification
debug:
when: restartNotificationHandler is not defined or restartNotificationHandler is skipped
有关如何始终触发处理程序的信息,请参见https://serverfault.com/questions/617548/always-trigger-handler-execution-in-ansible