Моя ситуация выглядит следующим образом (имейте в виду, что я не эксперт Chef и у меня нет полного контроля над нашей реализацией / средой):
- Я создал общую кулинарную книгу / рецепт с именем
foo
- В этом рецепте используется атрибут
node[:foo][:bar]
- Мы используем файл ролей , специфичный для проекта, чтобы установить специфичный для проектаатрибуты, не зависящие от среды
- Мы используем файлы, зависящие от среды (например,
integration.rb
, regression.rb
и т. д.), для переопределения значений, специфичных для среды.
Моя проблема в том,Я использую этот рецепт foo
в более чем 1 роли.Но мне нужно переопределить значение bar
для каждого проекта и .Итак, у меня есть проекты ProjectA
и ProjectB
.Я хочу следующее:
- при запуске роли
ProjectA
в integration
Я хочу, чтобы node[:foo][:bar]
было bob
- при запуске роли
ProjectA
в regression
Я хочу, чтобы node[:foo][:bar]
было jane
- при выполнении роли
ProjectB
в integration
Я хочу, чтобы node[:foo][:bar]
было john
- при запуске роли
ProjectB
в regression
Я хочу, чтобы node[:foo][:bar]
было smith
Я попытался определить значение ProjectA:bar
в integration
, а затем использовать его в роли override_attributes()
в ProjectA
для получения foo:bar
, но я получаю ошибку undefined local variable or method
default '`, когда я делаю следующее:
override_attributes(
'foo' => {
'bar' => default['ProjectA']['bar']
}
)
как мне настроить вещи, чтобы я мог использовать один и тот же рецепт в нескольких ролях, но переопределять значениядля этого рецепта на основе окружающей среды?