我们正在通过 puppet 对一些服务器进行基本管理 - 服务器本身作为集群系统的一部分运行,该系统处理用户帐户等其他方面,并包含一个用于检测关键文件(/etc/passwd 等)更改的监控脚本。如果 puppet 更新软件包,它可能会更改这些关键文件,从而触发监控系统。(这并非无意的)
监控系统有一个可以手动运行的命令来清除状态,每次 puppet 应用任何更改时,我们都必须执行此操作,当我们开始收到电子邮件时!
我们可以定义一个在 run_stage 后运行的 exec 来运行命令,但默认情况下它会在每次 puppet 运行时触发,然后我们的报告将始终显示为 puppet 所做的更改,无论是否进行了更改。
有没有办法可以设置 exec 以便它仅在 puppet 应用了其他更改时才运行?
答案1
如果exec
资源具有专用阶段,则可以通过让其订阅所有其他阶段来实现所需的行为,例如
exec { "pacify-rkhunter":
...
subscribe => Stage['pre','main','aux'],
refreshonly => true,
}