如何创建仅在Puppet

时间:2017-11-17 17:15:45

标签: puppet

可以创建仅在收到通知事件时执行的类吗?我想做“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”只能在存档下载文件时执行,即触发通知事件时。

谢谢!

1 个答案:

答案 0 :(得分:2)

  

可以创建仅在收到通知事件时执行的类吗?

没有。因此,最好避免将Exec资源概念化为您描述的行为。 节点目录中声明的每个资源都会在每次运行时与节点同步,除非资源故障可能会阻止其他资源根据已建立的关系进行同步。成功同步并且还从另一个资源接收事件的资源也会刷新,但对于许多资源类型,刷新操作是无操作。

没有例外,或者至少以这种方式概念化Puppet的行为是舒适和一致的。为此,我们可以通过将refreshonly => true解释为无条件地声明资源最初是同步的,而不是根据其{{1 }},onlyifunless参数(默认为“no”)。由于此类creates在运行开始时已经同步,因此同步它不涉及采取任何操作。类没有类似的功能。

至于你想要实现的目标,我建议将属于该类的Exec资源声明为refreshonly(通过将其声明为资源默认值可以方便地实现)并允许其他资源同步。