En chef, ¿cómo accedo a los atributos dentro de los archivos de roles?

13

Puedo establecer atributos en los archivos de roles tal como se documenta, pero no puedo acceder a los atributos ya establecidos por los libros de cocina que estoy usando.

Por ejemplo dentro de /roles/appserver.rb:

name "appserver"

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

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

Lo que obtengo es una excepción que indica que el chef no puede encontrar el método / variable 'nodo'.

Gracias

Ophir Radnitz
fuente

Respuestas:

12

No puedes. El rol Ruby DSL se convierte de Ruby a JSON cuando carga el rol al servidor con un cuchillo. El objeto de nodo no está disponible, ya que no se procesa en el contexto de una ejecución de Chef.

Si desea combinar atributos de nodo, en su lugar, debe hacerlo en una receta, por ejemplo:

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

Realmente puede usar require_relative 'base_role_file'dentro de un rol y este archivo requerido puede establecer algunas variables globales para su uso. Bastante hacky.

brauliobo
fuente