我以为我可以通过这样的方式安装多个JDK:
node[:mycookbook][:jdk_versions].each do |jdk_version|
node.set[:java][:jdk_version] = jdk_version
include_recipe "java::default"
end
但是,这只会安装1个JDK版本:属性中的第1个版本。我猜测是因为属性是在编译阶段确定的,然后从include_recipe安装java只是重新运行相同的属性(并认为自己已经是最新的)。
有关重新使用具有不同属性的配方的任何建议吗?
**编辑**
我刚刚注意到这里https://docs.chef.io/recipes.html#include-recipes
如果多次使用include_recipe方法来包含a 配方,只处理第一个包含和任何后续 夹杂物被忽略了。
*编辑2 * 基于@tensibai建议,我现在能够在我自己的食谱中手动使用java cookbook中的资源安装多个JDK。
arch = node[:java][:arch]
node[:mycookbook][:jdk_versions].each do |jdk_version|
node.set[:java][:java_home] = "/usr/lib/jvm/jdk#{jdk_version}"
is_default = jdk_version == node[:mycookbook][:default_jdk_version]
java_ark "jdk#{jdk_version}" do
url node[:java][:jdk][jdk_version][arch][:url]
default is_default
checksum node[:java][:jdk][jdk_version][arch][:checksum]
app_home node[:java][:java_home]
bin_cmds node[:java][:jdk][jdk_version][arch][:bin_cmds]
alternatives_priority node[:java][:alternatives_priority]
retries node[:java][:ark_retries]
retry_delay node[:java][:ark_retry_delay]
action :install
done
done
之后,我在最初的厨师运行后得到以下内容(发布版本编辑):
- (dir) jdk1.6.0_X
- (dir) jdk1.7.0_Y
- (dir) jdk1.8.0_Z
- (link) jdk6 -> /usr/lib/jvm/jdk1.6.0_X
- (link) jdk7 -> /usr/lib/jvm/jdk1.7.0_Y
- (link) jdk8 -> /usr/lib/jvm/jdk1.6.0_Z
出于某种原因,JDK8(此运行设置为默认值,因此is_default
解析为true)链接到jdk 6路径。我还在运行期间获得与set-alternatives相关的克隆资源警告。但是,如果我重新运行chef(设置了相同的属性),它会修复符号链接:
* java_ark[jdk6] action install (up to date)
....
* java_ark[jdk7] action install[2016-05-04T07:50:37+00:00] WARN: Cloning resource attributes for java_alternatives[set-java-alternatives] from prior resource (CHEF-3694)
....
* java_ark[jdk8] action install
- Symlink /usr/lib/jvm/jdk1.8.0_Y to /usr/lib/jvm/jdk8[2016-05-04T07:50:37+00:00] WARN: Cloning resource attributes for java_alternatives[set-java-alternatives] from prior resource (CHEF-3694)
知道为什么会这样吗?
答案 0 :(得分:2)
来自java食谱自述文件:
本食谱包含
java_ark
LWRP。一般来说这个LWRP 不推荐使用ark cookbook中的ark
,但它仍然有效 本烹饪书中用于处理Oracle JDK安装。
来自[方舟] README示例:
ark 'jdk' do
url 'http://download.example.com/jdk-7u2-linux-x64.tar.gz'
version '7.2'
path "/usr/local/jvm/"
home_dir "/usr/local/jvm/default"
checksum '89ba5fde0c596db388c3bbd265b63007a9cc3df3a8e6d79a46780c1a39408cb5'
append_env_path true
owner 'foobar'
end
你可以制作一个你希望安装的jdk风格,并用以下方式调用方舟倍数:
属性(虚拟值):
default['jdk']['open-1.7'] = {
"url" => "http://download.example.com/jdk-7u2-linux-x64.tar.gz",
"version" => "7.2",
"checksum" => "89ba5fde0c596db388c3bbd265b63007a9cc3df3a8e6d79a46780c1a39408cb5"
}
default['jdk']['open-1.6'] = {
"url" => "http://download.example.com/jdk-6u42-linux-x64.tar.gz",
"version" => "6.42",
"checksum" => "89xxxxxxxxxx08cb5"
}
配方:
node['jdk'].each do |jdk,properties|
ark jdk do
url properties['url']
version properties['version']
path "/usr/local/jvm/"
home_dir "/usr/local/jvm/default"
checksum propertie['checksum']
append_env_path true
owner 'foobar'
end
end
我允许你根据需要扩展哈希值和配方内的值(设置默认的jdk等)。