Wie greife ich in chef auf Attribute in Rollendateien zu?


13

Ich kann Attribute in Rollendateien wie dokumentiert festlegen, aber ich kann nicht auf Attribute zugreifen, die bereits in den von mir verwendeten Kochbüchern festgelegt wurden.

Zum Beispiel in /roles/appserver.rb:

name "appserver"

run_list(%w{
  recipe[tomcat::default]
})

default_attributes(
  :tomcat => {
    :java_options => "-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=" + node[:tomcat][:log_dir]
  }
)

Was ich bekomme, ist eine Ausnahme, die besagt, dass der Küchenchef die Methode / Variable 'node' nicht finden kann.

Vielen Dank

Antworten:


12

Du kannst nicht. Die Rolle Ruby DSL wird von Ruby nach JSON konvertiert, wenn Sie die Rolle mit knife auf den Server hochladen. Das Node-Objekt ist nicht verfügbar, da es nicht im Rahmen eines Chef-Laufs verarbeitet wird.

Wenn Sie stattdessen Knotenattribute kombinieren möchten, sollten Sie dies in einem Rezept tun, zum Beispiel:

"#{node[:tomcat][:java_options]}#{node[:tomcat][:log_dir]}"

0

Sie können diese Funktion tatsächlich require_relative 'base_role_file'in einer Rolle verwenden. Diese erforderliche Datei kann einige globale Variablen festlegen, die Sie verwenden können. Ziemlich abgedreht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.