傀儡事实,列出软件Windows
Puppet fact, list software Windows
我是 puppet 和 ruby 的新手,刚刚尝试编写自定义事实但是......遇到以下问题
Facter.add("vsphere_installed") do
confine :operatingsystem => :windows
setcode do
if Facter::Util::Resolution.exec('c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -NoProfile -ExecutionPolicy Bypass -Command "Get-WmiObject -Class Win32_Product | Select-Object -DisplayName | ? {$_.DisplayName -Match "vsphere"}"') = true
result = "vSphere installed"
else
result = "false"
end
end
end
我不知道具体怎么做,我想列出已安装的程序并搜索一个程序,如果 return 为真(找到),则表明它已安装。
这个例子到目前为止 returns 只有 false ....
Puppet 是关于期望状态 - 不是程序
感觉你现在把 Puppet 当作程序来处理,而 Puppet 更多的是关于期望的状态。你确定安装了什么,你不一定要问。
因此,对于某些服务器角色,您会说最终状态是您需要 vSphere 以及其他软件。
你可以做出这些决定,你不应该使用 Puppet 来发现状态,而是告诉它状态并让它做它最擅长的事情。
发现是您可以使用探索机器的工具在带外进行的事情,尝试puppet resource package
,您就会明白我的意思。
自定义事实
但要回答您的问题,您可能应该使用自定义可执行文件并直接使用 PowerShell,because the command string still needs to be escaped in the double quotes(并且可能还需要以使用撇号和双引号的方式进行转义)-文档还指向使用 Facter::Core::Execution.exec
而不是 Facter::Util::Resolution.exec
.
也不要使用 Win32_Product - Win32_Product class can trigger Windows Installer to do a repair on all MSI installed software as a consistency check。它确实会导致机器做很多不必要的工作——使用它并不是一个好主意。我建议直接查询卸载程序注册表项。
我是 puppet 和 ruby 的新手,刚刚尝试编写自定义事实但是......遇到以下问题
Facter.add("vsphere_installed") do
confine :operatingsystem => :windows
setcode do
if Facter::Util::Resolution.exec('c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -NoProfile -ExecutionPolicy Bypass -Command "Get-WmiObject -Class Win32_Product | Select-Object -DisplayName | ? {$_.DisplayName -Match "vsphere"}"') = true
result = "vSphere installed"
else
result = "false"
end
end
end
我不知道具体怎么做,我想列出已安装的程序并搜索一个程序,如果 return 为真(找到),则表明它已安装。 这个例子到目前为止 returns 只有 false ....
Puppet 是关于期望状态 - 不是程序
感觉你现在把 Puppet 当作程序来处理,而 Puppet 更多的是关于期望的状态。你确定安装了什么,你不一定要问。
因此,对于某些服务器角色,您会说最终状态是您需要 vSphere 以及其他软件。
你可以做出这些决定,你不应该使用 Puppet 来发现状态,而是告诉它状态并让它做它最擅长的事情。
发现是您可以使用探索机器的工具在带外进行的事情,尝试puppet resource package
,您就会明白我的意思。
自定义事实
但要回答您的问题,您可能应该使用自定义可执行文件并直接使用 PowerShell,because the command string still needs to be escaped in the double quotes(并且可能还需要以使用撇号和双引号的方式进行转义)-文档还指向使用 Facter::Core::Execution.exec
而不是 Facter::Util::Resolution.exec
.
也不要使用 Win32_Product - Win32_Product class can trigger Windows Installer to do a repair on all MSI installed software as a consistency check。它确实会导致机器做很多不必要的工作——使用它并不是一个好主意。我建议直接查询卸载程序注册表项。