No chef, como faço para acessar atributos nos arquivos de função?

13

Consigo definir atributos nos arquivos de função conforme documentados, mas não consigo acessar os atributos já definidos pelos livros de receitas que estou usando.

Por exemplo, em /roles/appserver.rb:

name "appserver"

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

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

O que recebo é uma exceção afirmando que o chef não consegue encontrar o método / variável 'node'.

obrigado

Ophir Radnitz
fonte

Respostas:

12

Você não pode. A função Ruby DSL é convertida de Ruby para JSON quando você carrega a função no servidor com faca. O objeto do nó não está disponível, pois não é processado no contexto de uma execução do Chef.

Se você deseja combinar atributos de nó, faça isso em uma receita, por exemplo:

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

Você pode realmente usar require_relative 'base_role_file'dentro de uma função e esse arquivo necessário pode definir algumas variáveis ​​globais para você usar. Muito hacky.

brauliobo
fonte