我正在尝试为不同的环境构建 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]
可能会奏效。但是:通常最好避免将这种逻辑放入您的模板中 - 而不是在配方中进行:
然后,在模板中:
阅读此配方代码时,很明显模板不会使用所有域 - 仅使用与其环境相关的域。阅读模板时,变量更短,更容易阅读。