如何为nginx cookbook定义自定义属性?

时间:2015-04-13 22:13:44

标签: nginx chef configuration-management test-kitchen

对于我目前的问题,我正在使用nginx食谱。我想要做的是从源代码安装它(使用nginx::source没有问题),并将其作为前缀/opt/nginx/<version>/,但它始终以/opt/nginx-<version>/为前缀(默认情况下)

这是我的./attributes/default.rb

node.override['nginx']['source']['prefix'] = "/opt/nginx/#{node['nginx']['source']['version']}"
#also tested
override['nginx']['source']['prefix'] = "/opt/nginx/#{node['nginx']['source']['version']}"
#and also
default['nginx']['source']['prefix'] = "/opt/nginx/#{node['nginx']['source']['version']}"

我不理解什么?

由于


另外一件事是:   - 我怎样才能像上面那样加上前缀并创建一个到/opt/nginx/current的sym-link(即使在更新后也这样做)?

1 个答案:

答案 0 :(得分:1)

所以,这是食谱中的一个缺点。许多变量是根据该属性的值构建的,如果您没有将覆盖值设置为FIRST,那么cookbook中的值仍然会为派生属性赢得。

如果您在nginx['source']['prefix']的节点或环境中设置覆盖应该有效,但它并不理想。或者,也可以覆盖派生值。

https://github.com/miketheman/nginx/blob/master/attributes/source.rb

default['nginx']['source']['sbin_path'] = "#{node['nginx']['source']['prefix']}/sbin/nginx"
default['nginx']['source']['default_configure_flags'] = %W(
  --prefix=#{node['nginx']['source']['prefix']}  # <= this one needs overridden
  --conf-path=#{node['nginx']['dir']}/nginx.conf
  --sbin-path=#{node['nginx']['source']['sbin_path']}
)

可能还有其他人,但那些是我所知道的,并且很突出。