由于Puppet中没有简单的方法来检查代理上是否存在文件,因此我试图编写一个执行此检查的模块。但是,它没有按预期工作。我已完成以下操作:
puppet module generate root-mymodule
mymodule/manifests/file_check.pp
.. .. if defined(File["/tmp/test_file"]) { .. ..
但是,这并没有实现我想要的。显然,它仅检查文件是否在目录中定义。如何获取它以实际检查文件是否存在?
答案 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有更好的方式来处理大多数您可能会用到的事情,大多数情况下最好根本不要完成其他任务。如果您想针对特定内容进行此操作,那么我邀请您提出关于该特定内容的新问题。