属性付きのシェフクックブックを作成しました。次に、コードをノードにブーストラップして、追加の属性を追加したり、デフォルトをオーバーライドしたりしようとしました。属性ツリーを印刷して、ロードされている属性とオーバーライドされている属性を確認することはできますか?
属性ツリー全体を(たとえば、ソロ環境では役に立たない、シェフサーバーからナイフを介してではなく、収束したシェフの内部から)便利な形式で取得するには:
node.to_hash
を探しています http://www.rubydoc.info/gems/chef/Chef%2FNode%3Ato_hash を参照してください
そこにある他のいくつかのオプション-- http://www.rubydoc.info/gems/chef/Chef/Node
きれいに印刷されたログを取得するには、シェフのjsonlibsきれいなプリンターを使用できます。
output="#{Chef::JSONCompat.to_json_pretty(node.to_hash)}"
log output
または、クライアントにローカルなファイルを書き込みます。
output="#{Chef::JSONCompat.to_json_pretty(node.to_hash)}"
file '/tmp/node.json' do
content output
end
これはコンバージドノードであるため、node.debug_value
で取得できるdefault/override/etcレベルは取得されないことに注意してください。ただし、属性の名前/パスが実際にわからない場合、またはループする必要がある場合多くの属性にわたって、これはあなたの友達かもしれません。
次のような巨大な結果が得られます(高度にトリミングされています!)
{
"chef_type": "node",
"name": "node.example.com",
"chef_environment": "_default",
"build-essential": {
"compile_time": false
},
"homebrew": {
"owner": null,
"auto-update": true,
...
},
"recipe": [
"example"
],
"run_list": [
"recipe[example]"
]
}
おかげで この答え きれいなプリンターポインタのために
node.debug_value
を使用して、単一の属性を表示できます。これにより、各レベルでその属性の値が出力されます。ただし、各属性の各レベルでこれを行うのは困難です(それを行う方法がわかりません)。さらに、ohaiからの属性が大量にあるため、それを実行したいかどうかもわかりません。
シェフの実行が正しく完了している場合は、knife node show -l <nodename>
(小文字のL)を実行できます。実際の値が表示されますが、大量のデータが提供され、デフォルト、通常、オーバーライドなどの値はわかりません。
@keenによる回答をフォークすると、YAML形式でより人間が読める形式の出力が生成されます。
output = node.to_yaml
file '/var/node.yaml' do
content output
end
プロビジョニングされた後、ノードから変数を読み取るのは簡単な場合があります。
knife node edit <hostname-here> -a