質問
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の属性を使用して使用します。