厨师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_if
、only_if
和 guard_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
如果你有更好的解决办法,请告诉我。
谢谢。
我有一个 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_if
、only_if
和 guard_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
如果你有更好的解决办法,请告诉我。
谢谢。