我有一个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
安装的后卫。
答案 0 :(得分:2)
Guard子句是所有资源都可用的核心功能,因此找不到windows_package
特有的内容。您可以在Chef文档中找到有关not_if
,only_if
和guard_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
如果您有更好的解决方案,请告诉我。
谢谢。