Я могу установить атрибуты в файлах ролей как задокументированный но я не могу получить доступ к атрибутам, уже установленным в кулинарных книгах, которые я использую.
Например, в /roles/appserver.rb:
name "appserver"
run_list(%w{
recipe[tomcat::default]
})
default_attributes(
:tomcat => {
:java_options => "-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=" + node[:tomcat][:log_dir]
}
)
Я получаю исключение, в котором говорится, что шеф-повар не может найти метод / переменную узла.
Спасибо
Ты не можешь. Роль Рубиновый DSL конвертируется из Ruby в JSON при загрузке роли на сервер с помощью ножа. Объект узла недоступен, так как он не обрабатывается в контексте выполнения Chef.
Если вы хотите объединить атрибуты узлов, вместо этого вы должны сделать это в рецепте, например:
"#{node[:tomcat][:java_options]}#{node[:tomcat][:log_dir]}"
Вы действительно можете использовать require_relative 'base_role_file'
внутри роли, и этот требуемый файл может устанавливать для вас некоторые глобальные переменные. Довольно хакерский.