厨师windows_package 守卫存在吗?

chef windows_package guards exists?

我有一个 windows_package 资源可以在 windows 机器上安装 jdk 8,它看起来像这样:

java_source="C:\chef_solo\utils\jdk-8u121-windows-x64.exe"
package_name="Java(TM) SE Development Kit 8 (64-bit)"
windows_package package_name do
  source java_source
  action :install
  installer_type :custom
  options "/s #{additional_options}"
end

问题是每个厨师 运行 安装相同的 jdk 并且在第二次安装后,java 不再工作。

我在找 windows_package 守卫,但没找到。那是因为它们不存在?

无论如何,我找到了一些检查 java 是否存在的 powershell 解决方案,我需要知道我是否可以以某种方式使用它们作为我的 windows_package 安装的保护。

解决方法在这里: How to get the Java version in PowerShell

保护子句是所有资源上可用的核心功能,因此没有特定于 windows_package 的内容可供查找。您可以在 Chef 文档中找到有关 not_ifonly_ifguard_interpreter 的详细信息。

所以,按照@coderanger的思路,最后的结果是这样的:

windows_package package_name do
  source java_source
  action :install
  installer_type :custom
  options "/s #{additional_options}"
  guard_interpreter :powershell_script
  only_if "!(dir 'HKLM:\SOFTWARE\JavaSoft\Java Runtime Environment'  | select -expa pschildname -Last 1)"
end

如果你有更好的解决办法,请告诉我。

谢谢。