在 Ansible 中,检测到任何更改时如何运行任务?

问题描述 投票:0回答:1

我有一些以无盘模式运行 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
。如果剧本中的任何位置发生任何更改,是否有办法执行任务和/或处理程序?

automation ansible task handler
1个回答
0
投票

恐怕如果不按照 Zeitunator

 在评论中的建议将可能改变系统状态的任务分组到
block中,这是不可能的。

此外,处理程序的工作方式并不完全按照您的预期 - 它们可以收到任意数量的任务的通知,但默认情况下它们仅在播放结束后运行一次。

来自控制处理程序何时运行

默认情况下,处理程序在特定播放中的所有任务完成后运行。通知处理程序在以下每个部分之后自动执行,按以下顺序:

pre_tasks
roles
/
tasks
post_tasks
。这种方法很有效,因为处理程序只运行一次,无论有多少任务通知它。例如,如果多个任务更新配置文件并通知处理程序重新启动 Apache,Ansible 只会反弹 Apache 一次,以避免不必要的重新启动。

为了实现你想要的,你不仅要

notify
它们,还要在每个任务后添加
meta: flush_handlers

© www.soinside.com 2019 - 2024. All rights reserved.