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

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

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

我无法从食谱属性文件和食谱中访问这些内容。

答案1

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

属性的优先级如下,从低到高:

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

以上来自:

答案2

最后,我能够在 Chef 菜谱中使用环境的属性。假设我们有一个这样的环境:

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

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

我在 conf erb 文件中的操作如下:

$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.

答案3

现在正确的顺序是来自 chef 文档站点

  1. 位于 cookbook 属性文件中的默认属性
  2. 位于配方中的默认属性
  3. 位于环境中的默认属性
  4. 位于角色中的默认属性
  5. 位于 cookbook 属性文件中的 force_default 属性
  6. 位于配方中的 force_default 属性
  7. 位于食谱属性文件中的正常属性
  8. 位于配方中的正常属性
  9. 位于 cookbook 属性文件中的覆盖属性
  10. 位于配方中的覆盖属性
  11. 位于角色中的覆盖属性
  12. 位于环境中的覆盖属性
  13. 位于 cookbook 属性文件中的 force_override 属性
  14. 位于配方中的 force_override 属性
  15. Chef-client 运行开始时,Ohai 识别的自动属性

相关内容