获取可行的持续通知列表



我正在寻找一种获取列表(可能是Ansible System变量)的方法,该列表包含剧本触发的当前处理程序通知。

换句话说,在角色的某个时刻,我想在一个任务中添加"何时"条件,该任务测试是否尚未发送"重新启动通知" ->当不在"通知列表"中重新启动时执行此任务

有什么想法吗?

非常感谢!

我终于提出了一个解决方案,可以使用事实。

我使用处理程序设置事实,而另一个则执行重新启动。我将他们两个都与听力参数相关联。

此外,仅在未定义或设置为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

i然后在需要时使用Restart LogstashReload Logstash,并且仅执行一个,重新启动或重新加载,但绝不同时执行。

类似的解决方案,使用寄存器而不是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

退后一步,您需要以这种方式重新启动某些东西似乎很奇怪。如果您没有进行任何更改,为什么要重新启动?而且,如果您进行了更改,为什么不在任何要更改的任务上注册通知呢?

无论如何,您想做的事情似乎最简单的解决方案只是提出通知:

- debug:
    msg: ensure that handler myhandler is notified
  changed_when: "force_change|default('false')|bool"
  notify: myhandler

这将注册myhandler的通知,并且以前的任务是否已注册通知也没关系:在播放结束时,myhandler处理程序将被触发一次。

最新更新