Я пытаюсь создавать файлы nginx для разных сред. У моего рецепта есть такая хэш-карта:
domain = {
production: {
public: 'example.com',
internal: 'example.dev'
},
staging: {
public: 'examplestage.com',
internal: 'examplestage.dev'
}
}
template '/etc/nginx/conf.d/example.conf' do
source 'example.conf.erb'
variables(
:domain => domain,
)
end
В моем шаблоне я хочу сделать что-то вроде этого:
...
server <%= @domain[node.chef_environment][:public] %> <%= @domain[node.chef_environment][:public] %>;
...
Я пытаюсь получить это, чтобы оценить что-то вроде этого, в зависимости от среды, к которой принадлежит узел staging
или production
:
server example.com example.dev;
Проблема в том, что node.chef_environment
часть не интерполируется. Как мне решить эту проблему?
Я подозреваю, что ваш код не работает, потому что node.chef_environment - это строка, а ваши хеш-ключи - символы. Если это так, @domain[node.chef_environment.to_sym][:public]
может работать.
Однако: обычно лучше избегать использования такой логики в шаблоне - вместо этого сделайте это в рецепте:
template '/etc/nginx/conf.d/example.conf' do
source 'example.conf.erb'
variables(
:domains => domain[node.chef_environment.to_sym],
)
end
Затем в шаблоне:
...
server <%= @domains[:public] %> <%= @domains[:internal] %>;
...
При чтении этого кода рецепта становится ясно, что шаблон не будет использовать все домены - только те, которые связаны с его средой. При чтении шаблона переменные короче и легче читаются.