web-dev-qa-db-ja.com

Chefでは、クックブックの属性ファイルから環境JSONで設定された属性にどのようにアクセスしますか?

複数の環境があり、環境JSONで属性が設定されているシェフシステムがあります。

クックブックの属性ファイルとレシピからこれらにアクセスするのに問題があります。

5
paul bruno

環境ファイルはどのように見えますか?デフォルトまたはオーバーライド属性を設定していますか?デフォルトを設定している場合、これは属性チェーンの優先度レベルがかなり低いため、レシピまたはロールによってオーバーライドされる可能性があることに注意してください。

属性の優先順位は、低いものから高いものへと次のとおりです。

  1. 属性ファイルに適用されるデフォルト属性
  2. 環境に適用されるデフォルトの属性
  3. ロールに適用されるデフォルトの属性
  4. レシピでノードに直接適用されるデフォルト属性
  5. 属性ファイルに適用される通常の属性または設定された属性
  6. レシピのノードに直接適用される通常の属性または設定属性
  7. 属性ファイルに適用された属性をオーバーライドする
  8. ロールに適用された属性をオーバーライドする
  9. 環境に適用された属性を上書きする
  10. レシピで直接ノードに適用された属性を上書きする

上から:

2
jtimberman

最終的に、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属性を使用して、環境属性を渡す必要があります。

私がconferbファイルで行う方法は、次のようになります。

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

正しい順序は、次のとおりです シェフのドキュメントサイトから

  1. クックブック属性ファイルにあるデフォルト属性
  2. レシピにあるデフォルトの属性
  3. 環境にあるデフォルトの属性
  4. ロールにあるデフォルトの属性
  5. クックブック属性ファイルにあるforce_default属性
  6. レシピにあるforce_default属性
  7. クックブック属性ファイルにある通常の属性
  8. レシピにある通常の属性
  9. クックブック属性ファイルにあるオーバーライド属性
  10. レシピにあるオーバーライド属性
  11. ロールにあるオーバーライド属性
  12. 環境にあるオーバーライド属性
  13. クックブック属性ファイルにあるforce_override属性
  14. レシピにあるforce_override属性
  15. Chef-clientの実行開始時にOhaiによって識別された自動属性
0
amit.naudiyal