puppet onlyif逻辑表达式

时间:2017-06-22 13:39:23

标签: puppet facter

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

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

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

提前致谢。

1 个答案:

答案 0 :(得分:2)

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

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

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

Facter 3 / Puppet 4:

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

Facter 2 / Puppet 3:

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

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