用于检查文件是否存在的人偶模块

时间:2018-07-16 18:25:48

标签: puppet

由于Puppet中没有简单的方法来检查代理上是否存在文件,因此我试图编写一个执行此检查的模块。但是,它没有按预期工作。我已完成以下操作:

  1. 在modules文件夹中,执行

puppet module generate root-mymodule

  1. mymodule/manifests/file_check.pp
    ..
    ..
      if defined(File["/tmp/test_file"]) {
    ..
    ..

但是,这并没有实现我想要的。显然,它仅检查文件是否在目录中定义。如何获取它以实际检查文件是否存在?

1 个答案:

答案 0 :(得分:1)

  

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

使用主/代理安排时,无法在目录构建期间测试客户端是否存在任意文件。目录构建在主数据库上进行;在此过程中无法从代理获取其他信息。相反,如果您使用的是puppet apply,那么您可以使用generate函数,但这是一个陷阱,目的是要咬人,后来又有人试图将您的代码移交给主服务器。

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

[...]无法实现我想要的。显然只有   检查文件是否在目录中定义。

是的,defined()就是这样做的。而且比这更糟的是,实际上:defined()只能测试是否已经评估了该特定File资源的声明 。它无法告诉您有关该资源的声明,以后可以在同一目录构建运行中对其进行评估。由于清单评估的顺序难以预测,因此defined比无用更糟:它是危险。不要使用它。

  

我如何到达   实际检查文件是否存在?

我想您想及时执行这种检查,以使用结果影响目录的构建。这就是事实的目的。木偶提供multiple approaches to defining and distributing your own facts。对于测试特定文件是否存在这样简单的事情,我建议使用“外部事实”方法,而不是“自定义事实”方法。

但是您还应该重新考虑您的前提,这显然是有用的,用于编译时测试代理上是否存在任意文件的通用机制。实际上,这种测试很少有用。 Puppet有更好的方式来处理大多数您可能会用到的事情,大多数情况下最好根本不要完成其他任务。如果您想针对特定内容进行此操作,那么我邀请您提出关于该特定内容的新问题。