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

Ophir Radnitz
quelle

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]}"
jtimberman
quelle
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.

Brauliobo
quelle