是否有唯一的等价条件可以应用于Puppet类或清单中的“文件”命令?

我正在使用CentOS 7与Puppet企业4.4.x为我的木偶大师。 我正在使用Windows Server 2012与Puppet企业4.x为我的木偶代理。

我的目标是根据是否存在文件,有条件地向每个Windows Server应用一个Puppet Manifest中的类。

是否有唯一的条件可以适用于Puppet类或文件命令?

这是我正在尝试的:

当Puppet Agent节点是Linux时,我知道如何在Puppet清单中使用generate。 我不知道如何在Windows上使用它。 当我尝试使用批处理命令或PowerShell命令来testing文件的存在时,我在Windows Server上运行Puppet Agent时出现错误。 错误提示“无法从远程服务器检索目录:SERVER上的错误400:语法错误在'=>'… 86行…”

我用generate命令尝试了各种不同的语法。 我想给一个可以在Puppet Agent节点上运行的命令的输出分配一个variables。

$vari = generate('C:\\WindowsPowerShell\\powershell.exe if(test-path ...)') 

我试图不使用生成命令并分配一个variables。

 $vari = if(test-path ...) 

似乎没有任何工作。 看来,我的条件逻辑将不得不被应用到清单中的每个文件命令。 exec命令可以使用我创build的onlyif子句。 让具有各种不同命令的类基于具有特定文件的Puppet Agent节点执行将更加可维护。

我试图通过读取Puppet Agent节点上的文件来获取variables。 这失败了不同的原因。 我不知道如何使Puppet中的文件命令(或一类不同的文件)有条件地激活。 另外,我希望Puppet清单(exec和文件命令)保留在一个文件中。 我该怎么办?

创build一个自定义的事实,用于testing主机上文件的存在,并使用它来有条件地包含该类。 只在master上generate运行,不在每个agent上调用。