清单中出现错误时 Puppet 工作流可以停止吗?

Can puppet workflow stop when there is an error in manifest?

我正在寻找让我的人偶 运行 停止的选项,就像当我看到清单中的某些检查出现故障时一样。

当我在节点上执行 puppet agent -t 时,如果清单中有一些错误,它应该停止执行而不是继续执行剩余的清单。

我尝试了命令"fail",如果在节点上找不到文件,但我得到了这个错误

Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Evaluation Error: Error while evaluating a Resource Statement, Evaluation Error: Error while evaluating a Function Call

我正在尝试下面类似的操作,如果文件存在则通知我存在,否则失败并停止执行

$file = "/tmp/file"
exec { "chk_${file}_exist":
  command => "true",
  path    =>  ["/usr/bin","/usr/sbin", "/bin"],
  onlyif  => "test -f ${file}"
}
-> if !(Exec["chk_${file}_exist"]) {
      fail('I am failing')
        }
else {
      notify { 'I am present  ":}
}

据我所知,Puppet 中没有使目录应用程序在单个资源出现故障时完全中止的通用机制,尽管这样的功能 has been requested before. One generally approaches such a question with a bit more precision, via one facet or another of resource relationships

如果您有一个资源,其正确应用取决于首先成功应用的另一个特定资源,那么您可以通过使用链接运算符之一或资源之一声明两者之间的关系来向 Puppet 描述该资源为此指定的元参数(beforerequirenotifysubscribe)。这将确保这些资源应用的相对顺序,并且如果应用依赖失败则不会尝试应用依赖资源。您可以通过在一侧或两侧与 类 或已定义类型的实例建立关系,甚至通过使 run stages 承担,将该概念应用于 资源.

但是,目前还没有办法在仍有资源符合应用条件的情况下使目录应用程序在资源故障时立即停止。