7

次の内容を含むレシピが 1 つ含まれたラッパーのクックブックがあります。

include_recipe "apt"

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

include_recipe "java"

コミュニティ サイトから apt と Java のクックブックを入手しました。このラッパーレシピのみでナイフブートストラップを実行しています。

ノードを収束すると、Java 7 の代わりに Java 6 がインストールされます。明らかな何かが欠けているように感じますが、それを理解できません。node.override で、デフォルトの jdk_version 6 がオーバーライドされるようにすべきではありませんか?

4

2 に答える 2

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 に答える
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']また、「install_flavor」が選択されている可能性が高い openjdk レシピは、その属性のみを調べます。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 に答える