我有一个厨师系统,其中我们有多个环境,并在环境 JSON 中设置了属性。
我无法从食谱属性文件和食谱中访问这些内容。
答案1
您的环境文件是什么样的?您是在设置默认属性还是覆盖属性?如果您设置默认属性,请注意,它在属性链中的优先级相当低,因此它可能会被配方或角色覆盖。
属性的优先级如下,从低到高:
- 属性文件中应用的默认属性
- 环境中应用的默认属性
- 角色中应用的默认属性
- 直接在配方中应用于节点的默认属性
- 属性文件中应用的正常或设置属性
- 直接在配方中对节点应用常规或设置属性
- 覆盖属性文件中应用的属性
- 覆盖角色中应用的属性
- 覆盖环境中应用的属性
- 覆盖直接在配方中应用于节点的属性
以上来自:
答案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 文档站点:
- 位于 cookbook 属性文件中的默认属性
- 位于配方中的默认属性
- 位于环境中的默认属性
- 位于角色中的默认属性
- 位于 cookbook 属性文件中的 force_default 属性
- 位于配方中的 force_default 属性
- 位于食谱属性文件中的正常属性
- 位于配方中的正常属性
- 位于 cookbook 属性文件中的覆盖属性
- 位于配方中的覆盖属性
- 位于角色中的覆盖属性
- 位于环境中的覆盖属性
- 位于 cookbook 属性文件中的 force_override 属性
- 位于配方中的 force_override 属性
- Chef-client 运行开始时,Ohai 识别的自动属性