7

I have a wrapper cookbook with one recipe in it, recipes/default.rb that reads the following:

include_recipe "apt"

node.override[:java][:jdk_version] = '7'

include_recipe "java"

I have the apt and java cookbooks from the community site. I'm running knife bootstrap with only this wrapper recipe.

When I converge the node, it installs Java 6 instead of Java 7. I feel like there's something obvious I'm missing, but I can't figure it out. Shouldn't the node.override make it so the default jdk_version of 6 is overridden?

4

2 回答 2

3

用“我不是厨师专家”来限定我的答案......但是,我认为问题在于 Chef 中的“嵌套属性”。我不认为你可以直接覆盖这个版本,因为在剥离了你的食谱可能有问题的所有可能的事情之后,我发现了这个:

http://lists.opscode.com/sympa/arc/chef/2012-10/msg00265.html

在设置默认 jdk 版本后,还有一些其他属性正在设置。如果你看这里:

http://community.opscode.com/cookbooks/java/source

您将看到default['java']['openjdk_packages']使用该默认版本进行设置,而 openjdk 配方(可能是选择的“install_flavor”)仅查看该属性。它不直接读入 jdk_version。有趣的是,java::oracle 配方(连同 java::oracle_i386 和 java::oracle_rpm)直接读入了版本,所以你最初的尝试会为此工作。

我会尝试根据您的特定平台使用其中之一设置版本:

Redhat/CentOS: node.override[:java][:openjdk_packages] = ["java-1.7.0-openjdk", "java-1.7.0-openjdk-devel"]
Debian/Ubuntu: node.override[:java][:openjdk_packages] = ["openjdk-7-jdk"]

其他“platform_family”选项可以在这里找到:https ://github.com/opscode-cookbooks/java/blob/master/attributes/default.rb

于 2013-11-05T21:48:14.890 回答
3

这是我如何使用包装食谱。

我必须将此语句添加到 attributes/default.rb:

override[:java][:openjdk_packages] = [
  "openjdk-7-jdk", "openjdk-7-jre-headless"
  ]

我尝试在此位置添加 jdk_version,但没有成功。我尝试在包装食谱食谱中添加此语句(使用 node.override),但它也不起作用。

是为什么会这样的描述。

于 2013-11-08T19:34:49.403 回答