No chef, como eu acesso atributos dentro de arquivos de função?

13

Eu sou capaz de definir atributos em arquivos de função como documentados , mas não consigo acessar atributos já definido por 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 eu recebo é uma exceção afirmando que o chef não pode encontrar o método / variável 'node'.

Obrigado

    
por Ophir Radnitz 07.03.2011 / 10:11

2 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 o uso de faca. O objeto do nó não está disponível, uma vez que não é processado no contexto de uma execução do Chef.

Se você quiser combinar os atributos do nó, você deve fazer isso em uma receita, por exemplo:

"#{node[:tomcat][:java_options]}#{node[:tomcat][:log_dir]}"
    
por 08.03.2011 / 06:22
0

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

    
por 29.07.2015 / 23:06

Tags