我有一些以无盘模式运行 Alpine Linux 的 Raspberry Pi。这需要通过
lbu
提交某些更改。我有以下处理程序:
- name: Commit changed files on Alpine Linux
when: ansible_os_family == "Alpine"
community.general.lbu:
commit: true
而且使用起来很简单
- name: Task
...
notify:
- Commit changed files on Alpine Linux
看起来它会变得重复(并且可能容易出错),需要在每项任务上
notify
。如果剧本中的任何位置发生任何更改,是否有办法执行任务和/或处理程序?
恐怕如果不按照 Zeitunator
在评论中的建议将可能改变系统状态的任务分组到
block
中,这是不可能的。
此外,处理程序的工作方式并不完全按照您的预期 - 它们可以收到任意数量的任务的通知,但默认情况下它们仅在播放结束后运行一次。
来自控制处理程序何时运行:
默认情况下,处理程序在特定播放中的所有任务完成后运行。通知处理程序在以下每个部分之后自动执行,按以下顺序:
、pre_tasks
/roles
和tasks
。这种方法很有效,因为处理程序只运行一次,无论有多少任务通知它。例如,如果多个任务更新配置文件并通知处理程序重新启动 Apache,Ansible 只会反弹 Apache 一次,以避免不必要的重新启动。post_tasks
为了实现你想要的,你不仅要
notify
它们,还要在每个任务后添加meta: flush_handlers
。