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

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]}"

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.