在Chef中,如何从cookbook属性文件访问环境JSON中设置的属性?

我有一个厨师系统,我们有多个环境,并在环境JSON中设置属性。

我无法从cookbook属性文件和食谱中访问这些菜单。

你的环境文件是什么样的? 你正在设置默认或覆盖属性? 如果您设置了默认值,请注意属性链中的优先级相当低,因此可能会被配方或angular色覆盖。

属性的优先级从低到高依次为:

  1. 属性文件中应用的默认属性
  2. 在环境中应用的默认属性
  3. 在angular色中应用的默认属性
  4. 直接在配方中应用于节点的默认属性
  5. 正常或设置属性应用于属性文件
  6. 正常或设置属性直接在配方中应用于节点上
  7. 覆盖属性文件中应用的属性
  8. 覆盖angular色中应用的属性
  9. 覆盖在环境中应用的属性
  10. 直接在配方中覆盖节点上应用的属性

以上来自:

最后,我能够在厨师食谱中使用环境的属性。 比方说,我们有这样的环境:

{ "name": "QA", "description": "QA environment", "cookbook_versions": { }, "json_class": "Chef::Environment", "chef_type": "environment", "default_attributes": { "comp_rsyslog": { "filetag_env": "compqa" } }, "override_attributes": { } } 

我们需要使用服务的模板configuration文件中的filetag_env属性来传递环境属性。

我在conf文件中的做法是这样的:

 $InputFileTag <%= node['comp_rsyslog']['filetag_env'] %>,<%= node['rsyslog']['filetag1'] %> 

在配方属性的文件中定义了<%= node['rsyslog']['filetag1'] %>

 default['rsyslog']['filetag1'] = 'comp_service' 

结果将是/etc/rsyslog.d/comp_service.conf一个文件,其内容如下所示:

 $InputFileTag compqa,comp_service. 

现在正确的顺序, 从厨师文件站点 :

  1. 位于食谱属性文件中的默认属性
  2. 位于配方中的默认属性
  3. 位于环境中的默认属性
  4. 位于angular色中的默认属性
  5. 位于cookbook属性文件中的force_default属性
  6. 位于配方中的force_default属性
  7. 位于食谱属性文件中的普通属性
  8. 位于配方中的正常属性
  9. 位于cookbook属性文件中的覆盖属性
  10. 位于配方中的覆盖属性
  11. 位于angular色中的重写属性
  12. 位于环境中的重写属性
  13. 位于cookbook属性文件中的force_override属性
  14. 位于配方中的force_override属性
  15. Ohai在厨师 – 客户运行开始时标识的自动属性