Puppet 通过exec有条件地执行傀儡定义的资源类型

Puppet 通过exec有条件地执行傀儡定义的资源类型,puppet,Puppet,我有一个需求,一个exec通知另一个exec,该exec通知定义的资源类型(设置一些变量并运行内部exec)。我的理解是,如果第二个exec失败,则不应刷新定义的资源类型。但它确实。。。请告诉我这里有什么问题 ` ` 下面是puppet应用程序运行的输出` puppet apply test.pp Notice: Compiled catalog for test-server-0 in environment dev in 0.08 seconds Notice: /Stage[main]/T

我有一个需求,一个exec通知另一个exec,该exec通知定义的资源类型(设置一些变量并运行内部exec)。我的理解是,如果第二个exec失败,则不应刷新定义的资源类型。但它确实。。。请告诉我这里有什么问题

`

`

下面是puppet应用程序运行的输出`

puppet apply test.pp
Notice: Compiled catalog for test-server-0 in environment dev in 0.08 seconds
Notice: /Stage[main]/Test/Exec[MAIN]/returns: MAIN EXEC FUNCTION OK
Notice: /Stage[main]/Test/Exec[MAIN]/returns: executed successfully
Notice: /Stage[main]/Test/Exec[SUB]: Triggered 'refresh' from 1 events
Notice: /Stage[main]/Test/Res_type[TITLE]/Exec[TITLE]/returns: EXEC IN DEF RESOURCE TYPE
Notice: /Stage[main]/Test/Res_type[TITLE]/Exec[TITLE]: Triggered 'refresh' from 1 events
Notice: Finished catalog run in 0.64 seconds
`

我的理解是,如果第二个exec失败,则不应刷新定义的资源类型。但它确实。。。请告诉我这里有什么问题

但是第二次执行不会失败。它根本不会同步,因为它是
仅刷新
,因此不会失败。刷新是一件独立的事情,尽管其命令是否在刷新时执行取决于相同的条件

此外,即使应用了第二个
Exec
,它也会失败。如果由于
onlyif
命令的结果而避免运行主
命令,这并不构成失败——相反,这是
Exec
已经同步的一种形式。仅当主命令运行且其退出代码不在被接受为成功的代码中时,才会发生故障(默认情况下,只有退出代码
0
被接受为成功)

然而,我倾向于说,因为从来没有应用过
Exec
,所以它不应该通知
Res\u类型
。由于其命令即使在刷新时也没有运行,因此它更不应该通知
Res\u类型
。话虽如此,
Exec
s在事件和刷新方面的行为长期以来一直是一件麻烦事,有一长串针对各个方面的问题。例如,请参阅相关问题列表


我不认为这个特殊的行为是前一张票的主题,所以你可以考虑归档一个,但是你也应该找到一个更好的方法去做你想做的事情。通常,
Exec
s是权宜之计,有时甚至是合适的,但是链接它们会有轻微的代码味道,依赖它们生成的事件会有更强的代码味道。

John-谢谢你的回复。我一定会搜索以前的票,如果没有找到相关的匹配项,我会打开一张新的。同时,上述代码(以非常详细的形式)本质上是一种逻辑,它将检测文件是否存在(是否存在由生成堆操作是否成功决定),并调整自定义资源类型(接收子和正文并发送电子邮件通知)的主题行和正文文本。@dasarp,由于已经涉及到自定义资源类型,因此可能需要重新讨论该类型的设计。很难确定,但似乎至少您的
Exec
s的某些行为会更合适地应用到自定义类型中。
puppet apply test.pp
Notice: Compiled catalog for test-server-0 in environment dev in 0.08 seconds
Notice: /Stage[main]/Test/Exec[MAIN]/returns: MAIN EXEC FUNCTION OK
Notice: /Stage[main]/Test/Exec[MAIN]/returns: executed successfully
Notice: /Stage[main]/Test/Exec[SUB]: Triggered 'refresh' from 1 events
Notice: /Stage[main]/Test/Res_type[TITLE]/Exec[TITLE]/returns: EXEC IN DEF RESOURCE TYPE
Notice: /Stage[main]/Test/Res_type[TITLE]/Exec[TITLE]: Triggered 'refresh' from 1 events
Notice: Finished catalog run in 0.64 seconds