2016-04-25 10 views
0

Ich dachte, ich mehrere JDKs von so etwas wie dies zu tun installieren könnte:ich mit einem Rezepte mehrmals mit verschiedenen Attributen

node[:mycookbook][:jdk_versions].each do |jdk_version| 
    node.set[:java][:jdk_version] = jdk_version 
    include_recipe "java::default" 
end 

Dies ist jedoch installiert nur 1 JDK-Version: die erste Version im Attribute. Ich schätze, weil Attribute während der Kompilierungsphase bestimmt werden und dann die Installation von Java aus dem Include_recipe nur mit dem gleichen Attribut erneut ausgeführt wird (und sich selbst als auf dem neuesten Stand hält).

Haben Sie Vorschläge für die Wiederverwendung eines Rezepts mit unterschiedlichen Attributen?

** bearbeiten **

Ich habe gerade bemerkt dies hier https://docs.chef.io/recipes.html#include-recipes

Wenn die include_recipe Methode mehr als einmal verwendet wird, eine Rezept enthalten, nur die erste Aufnahme verarbeitet wird und eine spätere Einschlüsse werden ignoriert.

* edit * 2 basierend auf @tensibai Vorschlag, ich bin jetzt in der Lage mehr JDKs installiert werden, die Ressourcen aus dem Java-Kochbuch mit manuell in meinem eigenen Kochbuch.

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 

Danach habe ich die folgende (Release-Version geschwärzt) erhalten nach der ersten Koch Lauf:

- (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 

Aus irgendeinem Grund JDK8 (die für diesen Lauf gesetzt wurde auf Default, so is_default Entschlüssen zu wahr) wird mit dem jdk 6-Pfad verknüpft. Ich bekomme auch Klonressourcenwarnungen in Bezug auf Set-Alternativen während des Laufs. Allerdings, wenn ich wieder laufen Koch (mit denselben Attributen gesetzt), setzt es den Symlink:

* 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) 

Jede Idee, warum dies geschehen?

Antwort

2

Vom java Kochbuch README:

Dieses Kochbuch enthält die java_ark LWRP. In der Regel wird dieser LWRP zu ark aus dem ark cookbook veraltet, aber es ist immer noch in diesem Kochbuch für die Handhabung der Oracle JDK-Installation verwendet.

Und von den [ark] README Beispiele:

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 

Sie haben soeben einen Hask von jdk Aromen Sie wollen mit etwas Arche Multiples mal installieren und rufen wie machen können:

Attribute (Dummy-Werte):

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" 
} 

Rezept:

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 

Ich lasse Sie die Werte in Hash und innerhalb des Rezepts nach Ihren Bedürfnissen erweitern (Einstellung der Standard-JDK, etc).

+0

Dank @tensibai, genau das, was ich gesucht habe. habe die Readme dort verpasst. – Brett

+0

@Brett NP, nur dass ich nicht gerne Credits aus der tatsächlichen Dokumentation stehlen, wenn ich antworte, also habe ich davon angefangen, vor der Präsentation, wie es verwendet werden könnte;) – Tensibai

+0

Tensibai, haben mehr Informationen in der Frage hinzugefügt - die Lösung funktioniert toll neben dem Symlink zu app_home. – Brett

Verwandte Themen