В Chef, как я могу получить доступ к атрибутам в файлах ролей?

13

Я могу установить атрибуты в файлах ролей, как описано в документации, но я не могу получить доступ к атрибутам, уже установленным в поваренных книгах, которые я использую.

Например, в /roles/appserver.rb:

name "appserver"

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

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

Я получаю исключение о том, что chef не может найти метод / переменную 'node'.

Благодарность

Офир Радниц
источник

Ответы:

12

Тебе нельзя. Роль Ruby DSL преобразуется из Ruby в JSON при загрузке роли на сервер с ножом. Объект узла недоступен, так как он не обрабатывается в контексте запуска Chef.

Если вы хотите объединить атрибуты узла, вы должны сделать это в рецепте, например:

"#{node[:tomcat][:java_options]}#{node[:tomcat][:log_dir]}"
jtimberman
источник
0

Вы можете фактически использовать require_relative 'base_role_file'внутри роли, и этот обязательный файл может установить некоторые глобальные переменные для вас. Довольно хакерский.

brauliobo
источник