exec
每次都会跑。当我手动执行unless
子句时,它退出0。
exec { 'disablepublicchocolatey':
command => "C:/ProgramData/chocolatey/choco.exe source disable -n=chocolatey",
unless => "C:/ProgramData/chocolatey/choco.exe source list | findstr -i 'chocolatey [Disabled]'",
require => Exec['chocolatelyinstall'],
provider => powershell,
}
有没有更好的方法来检查Chocolatey源是否已被禁用?字符串匹配不够健壮吗?
仅供参考,Windows 7 x64。
我相信如果您使用常规的exec提供程序,这将有效。
exec { 'disablepublicchocolatey':
command => "C:/ProgramData/chocolatey/choco.exe source disable -n=chocolatey",
unless => "cmd /c C:/ProgramData/chocolatey/choco.exe source list | findstr -i 'chocolatey [Disabled]'",
require => Exec['chocolateyinstall'],
}
如果使用PowerShell,则应将输出分配给变量,然后查询输出字符串是否包含您要查找的内容:
$sourceOutput = choco.exe source list
$sourceOutput.Contains('chocolatey [Disabled]')
您可以使用分号分隔语句,因此这应该提供您所需要的
exec { 'disable_public_chocolatey':
command => "C:/ProgramData/chocolatey/choco.exe source disable -n=chocolatey",
unless => "\$sourceOutput = choco.exe source list; if (\$sourceOutput.Contains('chocolatey [Disabled]')) {exit 0} else {exit 1}",
require => Exec['chocolatelyinstall'],
provider => powershell,
}
这对你现在没有什么帮助,但未来添加的是https://tickets.puppetlabs.com/browse/PUP-3428
要点是:
chocolatey::source {'name':
location => '',
ensure => present|absent,
enabled => true|false,
username => '',
password => '',
}
哪个应该适当地降低配置choco的工作量。
我在Update 2中提到过,提供程序会添加配置支持。源位处于PR模式并正常工作 - https://github.com/chocolatey/puppet-chocolatey/pull/79/files
回到2016年,Chocolatey模块在支持Puppet(puppetlabs / chocolatey)下移动,并添加了配置设置,功能和源支持。在https://forge.puppet.com/puppetlabs/chocolatey找到它