W szefie kuchni, jak uzyskać dostęp do atrybutów w plikach ról?

13

Jestem w stanie ustawić atrybuty w plikach ról zgodnie z dokumentacją, ale nie jestem w stanie uzyskać dostępu do atrybutów już ustawionych przez używane książki kucharskie.

Na przykład w /roles/appserver.rb:

name "appserver"

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

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

Dostaję wyjątek stwierdzający, że szef kuchni nie może znaleźć metody / zmiennej „węzła”.

Dzięki

Ophir Radnitz
źródło

Odpowiedzi:

12

Nie możesz. Rola Ruby DSL jest konwertowana z Ruby na JSON po przesłaniu roli na serwer za pomocą noża. Obiekt węzła jest niedostępny, ponieważ nie jest przetwarzany w kontekście uruchomienia szefa kuchni.

Jeśli chcesz połączyć atrybuty węzła, powinieneś to zrobić w recepturze, na przykład:

"#{node[:tomcat][:java_options]}#{node[:tomcat][:log_dir]}"
jtimberman
źródło
0

W rzeczywistości możesz użyć require_relative 'base_role_file'wewnątrz roli, a ten wymagany plik może ustawić pewne globalne zmienne do użycia. Dość hacky.

brauliobo
źródło