我们有使用节点属性的配方:
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'}}
不幸的是,节点仍然使用“默认”版本。一切正常,没有任何错误,完全忽略了我的属性。
后来我尝试将它添加到生产节点上的参数文件(chef-client -j params.json
),结果是一样的。
我错过了什么?我做错了什么?
P.S。 Chef::Log.info('Auth request proxy #{version}')
也完全被忽略了?
答案 0 :(得分:2)
您可以尝试使用YAML吗? kitchen.yml不是JSON文件,因此我不确定嵌入其中的JSON是否可行。
attributes:
request-proxy:
version: '1.0.8'
此外,您可能不应该使用node.default
,除非您只想获取默认值(并且绝不会覆盖任何覆盖)。如果你想在Chef中使用属性优先级(default,normal,override,force),你应该这样做:
node['request-proxy']['version']
最后,您还有一个带引号的单引号字符串。这将永远工作就像你在Ruby中所期望的那样(你运行rubocop吗?它会抓住这个)。尝试使用双引号,并从资源中间删除它:
Chef::Log.info("Auth request proxy #{version}")