是否存在可应用于 Puppet 类或清单中的“文件”命令的 onlyif 等效条件?

是否存在可应用于 Puppet 类或清单中的“文件”命令的 onlyif 等效条件?

我在 Puppet Master 中使用 CentOS 7 和 Puppet Enterprise 4.4.x。我在 Puppet Agent 中使用 Windows Server 2012 和 Puppet Enterprise 4.x。

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

是否存在可应用于 Puppet 类或文件命令的 onlyif 条件?

这是我正在尝试的:

我知道当 Puppet Agent 节点是 Linux 时如何在 Puppet 清单中使用 generate。我不知道如何在 Windows 中使用它。当我尝试使用批处理命令或 PowerShell 命令来测试文件是否存在时,我在 Windows Server 上运行 Puppet Agent 时收到错误。错误显示“无法从远程服务器检索目录:服务器上的错误 400:语法错误,位于...第 86 行的‘=>’...”

我尝试了多种不同的generate命令语法。我想将一个变量分配给在Puppet Agent节点上运行的命令的输出。

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

我也尝试过不使用生成命令并分配变量。

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

似乎什么都不起作用。似乎我的条件逻辑必须应用于清单中的每个文件命令。exec 命令可以使用我创建的 onlyif 子句。让具有各种不同命令的类基于具有特定文件的 Puppet Agent 节点执行会更易于维护。

我曾尝试通过读取 Puppet Agent 节点上的文件来获取变量。由于各种原因,此操作失败。我不知道如何使 Puppet 中的文件命令(或不同文件的类)有条件地激活。此外,我希望 Puppet 清单和类(exec 和文件命令)保留在一个文件中。我该怎么办?

答案1

创建一个自定义事实,测试主机上文件的存在,并使用它来有条件地包含该类。generate仅在主服务器上运行,不会在每个代理上调用。

相关内容