厨师windows_package卫士存在吗?

时间:2017-08-06 16:53:07

标签: windows powershell chef guard

我有一个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警卫,但无法找到任何警卫。那是因为它们不存在?

无论如何,我发现了一些PowerShell解决方案,用于检查java是否存在,我需要知道是否可以以某种方式使用它们作为windows_package安装的后卫。

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

2 个答案:

答案 0 :(得分:2)

Guard子句是所有资源都可用的核心功能,因此找不到windows_package特有的内容。您可以在Chef文档中找到有关not_ifonly_ifguard_interpreter的详细信息。

答案 1 :(得分:1)

所以,按照@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

如果您有更好的解决方案,请告诉我。

谢谢。