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?
Dank @tensibai, genau das, was ich gesucht habe. habe die Readme dort verpasst. – Brett
@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
Tensibai, haben mehr Informationen in der Frage hinzugefügt - die Lösung funktioniert toll neben dem Symlink zu app_home. – Brett