Chef - 覆盖节点属性

时间:2015-11-26 14:05:50

标签: json attributes override chef test-kitchen


我们有使用节点属性的配方:

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}')也完全被忽略了?

1 个答案:

答案 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}")
相关问题