質問

Chef SoloのJSONで属性値を指定することは可能ですか?私はランリストを持つsolo.jsonがあり、そこで属性を指定したいと思います。シェフのマニュアルは、私が何かをすることが可能であるべきであることを示すようです:

{
    "hostname": {
        "test": "value2"
    },
    "default_attributes": {
        "hostname": {
            "test": "value3"
        }
    },
    "override_attributes": {
        "hostname": {
            "test": "value4"
        }
    },
    "default": {
        "hostname": {
            "test": "value5"
        }
    },
    "run_list": [
        "recipe[hostname::default]"
    ]
}
.

しかし、私が私のレシピで値にアクセスしようとするたびに:

p node['hostname']['test']
.

属性/ default.rbで定義された値を取得します。

これらの値を参照する方法はありますか?

役に立ちましたか?

解決

ノードデータに保存できる属性の唯一のレベルはnormalで、収束の開始時にすべてのものがリセットされ、ロール、環境、およびクックブックから再構築されます。あなたはこのようなようなものが欲しいです:

{
  "normal": {
    "hostname": {
      "test": "something"
    }
  },
  "run_list": [
    "recipe[hostname::default]"
  ]
}
.

他のヒント

Chef-Solo用のJSONファイル内の属性を設定するために上記の例を使用して、"normal": {...}ブロックは完全に無視されました。実行リストが読み込まれましたが、属性はうまく機能しないようです。

マイコマンドは次のとおりです。

chef-solo -c /path/to/config_file.rb -j /path/to/file.json
.

私のJSONファイル:

{
  "name": "my_json_file",
  "description": "JSON run-list and attributes.",
  "normal": {
    "my_cookbook": {
      "git_branch": "staging"
    }
  },
  "run_list": [
    "recipe[my_cookbook::recipe1]",
    "recipe[my_cookbook::recipe2]",
  ]
}
.

収束中に、Chefはattributes/default.rbの内側のデフォルト値にまっすぐ戻りました。JSON値は正しく入力されていますか?これまでのところ、私の唯一の回避策は、Chef-Soloでテストしたい"git_branch":属性の新しいレシピを作成し、その更新されたrun-listを別のJSONファイルに追加しました。基本的にレシピ全体をコピーして単一のnode.normal['my_cookbook']['git_branch']値を変更します。言うまでもなく、これは解決策にならないはずです。

Chef 14.0.202を使用する

フォローアップ:

Chef Solo WorksでJSONファイル内の属性優先順位レベルを設定しない。JSONはこれに似ているはずです:

{
  "name": "my_json_file",
  "description": "JSON run-list and attributes.",
  "my_cookbook": {
    "git_branch": "staging"
  },
  "run_list": [
    "recipe[my_cookbook::recipe1]",
    "recipe[my_cookbook::recipe2]",
  ]
}
.

"normal": {...}または"default_attributes": {...}などを含まないなど、Chef-Soloの属性を使用して使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top