我有一个包装食谱,里面有一个食谱,食谱/ default.rb,它读取以下内容:
include_recipe "apt" node.override[:java][:jdk_version] = '7' include_recipe "java"
我有来自社区网站的apt和java食谱.我只使用这个包装配方运行刀具引导程序.
当我收敛节点时,它会安装Java 6而不是Java 7.我觉得我有一些明显的缺失,但我无法弄明白. node.override不应该这样做,所以默认的jdk_version为6会被覆盖吗?
解决方法
用“我不是厨师专家”来证明我的答案……但是,我认为问题在于Chef中的“嵌套属性”.我不认为你可以继续只是覆盖版本,因为在剥离了你的piddly配方可能出错的所有可能的东西之后,我发现了这个:
http://lists.opscode.com/sympa/arc/chef/2012-10/msg00265.html
在设置默认jdk版本后,还会设置一些其他属性.如果你看这里:
http://community.opscode.com/cookbooks/java/source
您将看到使用该默认版本设置默认[‘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