Dans chef, comment accéder aux attributs dans les fichiers de rôles?

13

Je suis en mesure de définir les attributs dans les fichiers de rôle documenté mais je ne suis pas en mesure d'accéder aux attributs déjà défini par les livres de cuisine que j'utilise.

Par exemple, dans /roles/appserver.rb:

name "appserver"

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

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

Ce que j'obtiens est une exception indiquant que le chef ne peut pas trouver la méthode / variable 'node'.

Merci

Ophir Radnitz
la source

Réponses:

12

Vous ne pouvez pas. Le rôle Ruby DSL est converti de Ruby en JSON lorsque vous téléchargez le rôle sur le serveur avec couteau. L'objet nœud n'est pas disponible, car il n'est pas traité dans le contexte d'une exécution Chef.

Si vous souhaitez combiner des attributs de noeud, vous devez le faire dans une recette, par exemple:

"#{node[:tomcat][:java_options]}#{node[:tomcat][:log_dir]}"
jtimberman
la source
0

Vous pouvez réellement utiliser à l' require_relative 'base_role_file'intérieur d'un rôle et ce fichier requis peut définir certaines variables globales à utiliser. Assez hacky.

brauliobo
la source