13 votes

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

Je suis en mesure de définir des attributs dans les fichiers de rôle comme suit documenté mais je ne suis pas en mesure d'accéder aux attributs déjà définis par les livres de recettes 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]
  }
)

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

Merci

12voto

BrewinBombers Points 1122

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

Si vous souhaitez combiner des attributs de nœuds, vous devez plutôt le faire dans une recette, par exemple :

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

0voto

brauliobo Points 177

Vous pouvez en fait utiliser require_relative 'base_role_file' à l'intérieur d'un rôle et ce fichier requis peut définir certaines variables globales que vous pouvez utiliser. C'est un peu compliqué.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X