使用chef安装java7,can';我不能让它工作

使用chef安装java7,can';我不能让它工作,java,chef-infra,Java,Chef Infra,我有一本包装食谱,其中有一个食谱,recipes/default.rb,内容如下: include_recipe "apt" node.override[:java][:jdk_version] = '7' include_recipe "java" 我有来自社区网站的apt和java食谱。我只是在用这个包装材料做刀子引导 当我聚合节点时,它会安装Java6而不是Java7。我觉得有一些明显的东西我遗漏了,但我无法理解。node.override不应该使6的默认jdk_版本被覆盖吗?用“我

我有一本包装食谱,其中有一个食谱,recipes/default.rb,内容如下:

include_recipe "apt"

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

include_recipe "java"
我有来自社区网站的apt和java食谱。我只是在用这个包装材料做刀子引导

当我聚合节点时,它会安装Java6而不是Java7。我觉得有一些明显的东西我遗漏了,但我无法理解。node.override不应该使6的默认jdk_版本被覆盖吗?

用“我不是厨师专家”来限定我的答案。。。但是,我认为问题在于Chef中的“嵌套属性”。我不认为你可以直接忽略这个版本,因为在仔细研究了你的小菜谱中可能出现的问题后,我发现:

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

您将看到
default['java']['openjdk\u packages']
使用该默认版本设置,而openjdk配方(可能是选择的“安装风格”)只查看该属性。它不直接读取jdk_版本。有趣的是,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"]

其他“平台家庭”的选择可以在这里找到:

以下是我如何让它与包装烹饪书一起使用的

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

override[:java][:openjdk_packages] = [
  "openjdk-7-jdk", "openjdk-7-jre-headless"
  ]
我尝试在这个位置添加jdk_版本,但没有成功。我尝试在包装器cookbook配方中添加此语句(使用node.override),但也没有成功


这是一个关于为什么会出现这种情况的描述。

很好,你解决了它,但出于好奇,我的解决方案是不是有点不正确?看起来我是对的。你的帮助很大,但这只帮了我一部分。有一个特定的地方需要设置这些设置。否则它不会工作。链接目前已断开。这对我完全有效。不知道为什么覆盖其他地方的属性不起作用。