我正在尝试基于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,
}
提前致谢。
答案 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 }
}
这将修复您的条件并为您提供所需的行为。