Chef - 覆盖节点属性
Chef - override node attribute
我们有使用节点属性的配方:
python_pip 'request_proxy' do
virtualenv '/opt/proxy/.env'
version node.default['request-proxy']['version']
Chef::Log.info('Auth request proxy #{version}')
action :install
end
属性在节点级别设置,一切正常,但出于测试目的,我想在我的本地 (kitchen/vagrant) 节点中覆盖它。作为第一步,我将属性添加到我的 .kitchen.yml:
suites:
- name: default
run_list:
- recipe[proxy_install]
attributes: {request-proxy: {'version': '1.0.8'}}
不幸的是节点仍然使用"default"版本。一切正常,没有任何错误,并且完全忽略了我的属性。
后来我尝试将其添加到生产节点上的参数文件 (chef-client -j params.json
) 中,结果是一样的。
我错过了什么?我做错了什么?
P.S。 Chef::Log.info('Auth request proxy #{version}')
也被完全忽略了??
您可以尝试使用 YAML 吗? kitchen.yml 不是 JSON 文件,所以我不确定你嵌入其中的 JSON 是否有效。
attributes:
request-proxy:
version: '1.0.8'
此外,您可能不应该使用 node.default
,除非您只想选择默认值(而不是任何覆盖)。如果你想在 Chef 中使用属性优先级(默认、正常、覆盖、强制),你应该这样做:
node['request-proxy']['version']
最后,您还有一个带变量的单引号字符串。这将 永远不会 像你在 Ruby 中期望的那样工作(你是 运行 rubocop 吗?它会抓住这个)。尝试用双引号将其从资源中间删除:
Chef::Log.info("Auth request proxy #{version}")
我们有使用节点属性的配方:
python_pip 'request_proxy' do
virtualenv '/opt/proxy/.env'
version node.default['request-proxy']['version']
Chef::Log.info('Auth request proxy #{version}')
action :install
end
属性在节点级别设置,一切正常,但出于测试目的,我想在我的本地 (kitchen/vagrant) 节点中覆盖它。作为第一步,我将属性添加到我的 .kitchen.yml:
suites:
- name: default
run_list:
- recipe[proxy_install]
attributes: {request-proxy: {'version': '1.0.8'}}
不幸的是节点仍然使用"default"版本。一切正常,没有任何错误,并且完全忽略了我的属性。
后来我尝试将其添加到生产节点上的参数文件 (chef-client -j params.json
) 中,结果是一样的。
我错过了什么?我做错了什么?
P.S。 Chef::Log.info('Auth request proxy #{version}')
也被完全忽略了??
您可以尝试使用 YAML 吗? kitchen.yml 不是 JSON 文件,所以我不确定你嵌入其中的 JSON 是否有效。
attributes:
request-proxy:
version: '1.0.8'
此外,您可能不应该使用 node.default
,除非您只想选择默认值(而不是任何覆盖)。如果你想在 Chef 中使用属性优先级(默认、正常、覆盖、强制),你应该这样做:
node['request-proxy']['version']
最后,您还有一个带变量的单引号字符串。这将 永远不会 像你在 Ruby 中期望的那样工作(你是 运行 rubocop 吗?它会抓住这个)。尝试用双引号将其从资源中间删除:
Chef::Log.info("Auth request proxy #{version}")