Назад | Перейти на главную страницу

Как в chef мне получить доступ к атрибутам в файлах ролей?

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

Например, в /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' внутри роли, и этот требуемый файл может устанавливать для вас некоторые глобальные переменные. Довольно хакерский.