检查文件是否存在的Puppet模块



由于Puppet中没有简单的方法来检查代理上是否存在文件,因此我正试图编写一个执行此检查的模块。然而,它并没有如预期的那样发挥作用。我做了以下工作:

  1. 在模块文件夹中,执行

puppet module generate root-mymodule

  1. mymodule/manifests/file_check.pp
。。。。如果已定义(文件["/tmp/test_File"]({。。..

然而,这并不能达到我想要的目的。显然,它只检查文件是否在目录中定义。如何让它真正检查文件是否存在?

由于Puppet中没有简单的方法来检查文件是否存在代理,我正试图编写一个执行此检查的模块。

在使用主/代理排列的目录构建过程中,无法测试客户端是否存在任意文件。目录构建发生在master上;在该过程中没有办法从代理获得附加信息。如果您使用的是puppet apply,那么您可以使用generate函数,但这是一个陷阱,等待着有人稍后试图将您的代码移动到主代码。

if defined(File["/tmp/test_file"]) {

[…]没有达到我想要的目的。显然这只是检查目录中是否定义了文件。

是的,defined()就是这么做的。事实上,更糟糕的是:defined()只能测试特定File资源的声明是否已经被评估过。它不能告诉您该资源的声明,这些声明稍后可能会在同一个目录构建运行中进行评估。由于显式评估顺序难以预测,defined比无用更糟糕:它是危险的。请勿使用。

如何将其实际检查文件是否存在?

我想您希望及时执行这样的检查,以使用结果来影响目录构建。这就是事实的意义所在。Puppet提供了多种方法来定义和分发您自己的事实。对于测试特定文件是否存在这样简单的事情,我建议使用"外部事实"方法,而不是"自定义事实"方法。

但您也应该重新考虑您的前提,这显然是一个通用的机制,用于在编译时测试代理上是否存在任意文件,这将是一件有用的事情。事实上,这样的测试很少有用。Puppet有更好的方法来处理大多数任务,否则你可能会使用这样的东西,而剩下的大多数任务通常最好根本不完成。如果你想用这个来表达一些特定的东西,那么我邀请你就这个特定的东西提出一个新的问题。

最新更新