web-dev-qa-db-ja.com

chef属性をどのように印刷またはデバッグしますか?

属性付きのシェフクックブックを作成しました。次に、コードをノードにブーストラップして、追加の属性を追加したり、デフォルトをオーバーライドしたりしようとしました。属性ツリーを印刷して、ロードされている属性とオーバーライドされている属性を確認することはできますか?

13
Cherry

属性ツリー全体を(たとえば、ソロ環境では役に立たない、シェフサーバーからナイフを介してではなく、収束したシェフの内部から)便利な形式で取得するには:

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]"
  ]
}

おかげで この答え きれいなプリンターポインタのために

13
keen

node.debug_valueを使用して、単一の属性を表示できます。これにより、各レベルでその属性の値が出力されます。ただし、各属性の各レベルでこれを行うのは困難です(それを行う方法がわかりません)。さらに、ohaiからの属性が大量にあるため、それを実行したいかどうかもわかりません。

シェフの実行が正しく完了している場合は、knife node show -l <nodename>(小文字のL)を実行できます。実際の値が表示されますが、大量のデータが提供され、デフォルト、通常、オーバーライドなどの値はわかりません。

6
Tejay Cardon

@keenによる回答をフォークすると、YAML形式でより人間が読める形式の出力が生成されます。

output = node.to_yaml
file '/var/node.yaml' do
  content output
end
2
wisbucky

プロビジョニングされた後、ノードから変数を読み取るのは簡単な場合があります。

knife node edit <hostname-here> -a
0