如果服务存在,我正在寻找一个在Windows服务器上启动服务的清单。 如果文件存在,我希望检查具有条件的服务。
service { 'test service':
ensure => 'running',
enable => true,
unless => 'if((test-path "C:\Program Files\test1") -or (test-path "C:/Program Files/test2")){ exit 0 } else { exit 1 }',
provider => powershell,}
上面的代码返回一个错误,除非是无效的参数。还有其他方法可以检查吗? 非常感谢!!
答案 0 :(得分:0)
看起来服务资源不具有支持条件包含的参数。 Puppet也没有一种简单的方法来检查我所知道的客户端上是否存在文件。我通过创建一个自定义事实来解决这个问题,该事实检查了我需要的条件,然后将资源包装在一个除非块中:
unless $facts['test_file_exists'] {
service { 'test service':
ensure => 'running',
enable => true,
}
因为自定义事实可以用任何可以将“key = value”对输出到stdout的语言编写,所以你可以使用现有的powershell代码作为一个事实,只需要做一些小改动:
if((test-path "C:\Program Files\test1") -or (test-path "C:\program Files\test2")){
write-host "test_file_exists=true
}
else{
write-host "test_file_exists=false"
}
有几种不同的方法可以将事实分发到您的客户端系统。我更喜欢将事实放入模块中,让pluginsync为我分发它。如果您不想将它包含在模块中,那么您必须找到一些方法将powershell代码放到C:\ ProgramData \ PuppetLabs \ facter \ facts.d \中,并在末尾添加正确的.ps1扩展名。