0

我正在尝试exec基于 Facter 变量为 Windows Server 设置 Puppet 资源。但是,它看起来onlyif只接受命令文件而不接受内联表达式。

有人可以帮我设置这个表达式onlyif(作为条件表达式或作为 inline-dos 命令)

exec { 'C:\Users\validate.cmd validate':
  onlyif   =>  "$validate_enabled" == true,   => This not recognized as command
  provider => powershell,
}

提前致谢。

4

1 回答 1

2

这里有几个问题。首先是语法onlyif不正确。该属性执行命令并检查是否成功,因此您需要将其更改为此以消除 Puppet 字符串和 shell 语法问题:

exec { 'C:\Users\validate.cmd validate':
  onlyif   => $validate_enabled,
  provider => powershell,
}

注意我写的第一部分(执行命令)。您不想在此实例中执行命令。您想检查布尔 Facter 事实的值。因此,您将使用 Puppet DSL 而不是 shell 命令来检查这一点。

因素 3/木偶 4:

# use fact hash
if $facts['validate_enabled'] {
  exec { 'C:\Users\validate.cmd validate': provider => powershell }
}

因素 2/木偶 3:

# specify global variable for safety
if $::validate_enabled {
  exec { 'C:\Users\validate.cmd validate': provider => powershell }
}

这将修复您的条件并为您提供所需的行为。

于 2017-06-22T16:27:46.403 回答