可以创建仅在收到通知事件时执行的类吗?我想做“exec”与“refreshonly”完全相同,我找不到如何做到这一点。具体来说,我想要做的是:
我有一个存档资源,用于下载文件,并带有“创建”属性:
archive { "/opt/service/service-${version}.jar":
source => "http://[ARTIFACT_URL]/service-${version}.jar",
creates => "/opt/service/service-${version}.jar",
cleanup => false,
}
我想这样做:
Archive["/opt/service/service-${version}.jar"] ~> Some_custom_class['some_title']
但“Some_custom_class”只能在存档下载文件时执行,即触发通知事件时。
谢谢!
答案 0 :(得分:2)
可以创建仅在收到通知事件时执行的类吗?
没有。因此,最好避免将Exec
资源概念化为您描述的行为。 节点目录中声明的每个资源都会在每次运行时与节点同步,除非资源故障可能会阻止其他资源根据已建立的关系进行同步。成功同步并且还从另一个资源接收事件的资源也会刷新,但对于许多资源类型,刷新操作是无操作。
没有例外,或者至少以这种方式概念化Puppet的行为是舒适和一致的。为此,我们可以通过将refreshonly => true
解释为无条件地声明资源最初是同步的,而不是根据其{{1 }},onlyif
和unless
参数(默认为“no”)。由于此类creates
在运行开始时已经同步,因此同步它不涉及采取任何操作。类没有类似的功能。
至于你想要实现的目标,我建议将属于该类的Exec
资源声明为refreshonly(通过将其声明为资源默认值可以方便地实现)并允许其他资源同步。