2017-10-24 9 views
2

私は私のデータディレクトリに次のYAMLファイルがあります:私は私のエージェントマシン上で人形を実行すると、私はパペットテンプレート反復とYAMLファイル

conf { 
<% settings = YAML.load_file('/etc/puppetlabs/code/environments/example/data/conf.yaml') -%> 
<% settings['type'].each do |val| -%> 
    <%= val %> 
<% end -%> 
} 

--- 
type: 
    - config_setting1: 
    foo: bar 
    - config_setting2: 
    foo: bar 

マイ.erbテンプレートは次のようになりますこれで終わりです:

conf { 
    {"config_setting1"=>nil, "foo"=>"bar"} 
    {"config_setting2"=>nil, "foo"=>"bar"} 
} 

私の最終目標は次のようになります。

conf { 
    config_setting1 { 
    foo: bar 
    } 
    config_setting2 { 
    foo: bar 
    } 
} 

私はいくつかは、実際に出力にそのように物事を得るために、私のテンプレートに行うためにクリーンアップが、私は現時点では最終結果よりもどのようにより集中だ知っています。わかりましたが、ネストされたハッシュをナビゲートするために設定の最後に['type']を使用することに慣れています。ハードコーディングすればこの構造をかなり簡単に作成できますが、繰り返し使用する方法を理解したいと思います。私は反復でPuppet Documentationに従ってみようとしてきましたが、例をそのままコピーしてもその例はうまくいかないので、少し難しかったです。私が持っているように、ネストされたyamlファイル内の単一のデータを引き出す方法を教えてください。キーか特定の値のどちらかですか?私のような何かを試してみました:これの

<% settings['type'].each do |val| -%> 
    <%= settings['val'] %> 
<% end -%> 

と複数のバリエーションを私は私が欲しかったものを手に入れる権利構文を見つけることができませんでした。私は<% settings['type'].each do |index, value| -%>の行に沿って何かを試してみましたが、私はそれを使っても何の結果も得られませんでした。誰かが正しい方向に私を指すことができたら、私はそれを感謝します。私はこれについてまったく間違った方法についてもやっていると言われています。このデータを得るためのよりよい方法があれば、私はすべて耳にします。

重要度の低いもう1つの質問ですが、私のロードファイルには絶対パスがあります...相対的な使用方法はありますか?

答えて

1

何かを入力することはあなた自身の質問に答える驚くべき方法です。私はかなり簡単な解決策があることを認識しました。私たちは私のテンプレート取る場合:

conf { 
<% settings = YAML.load_file('/etc/puppetlabs/code/environments/example/data/conf.yaml') -%> 
<% settings['type'].each do |val| -%> 
    <%= val %> 
<% end -%> 
} 

とライン3上を、私は私が探しているものを手に入れることができるよ<% settings.keys.each do |val| -%><% settings['type'].each do |val| -%>を交換してください。私はyamlやその他の方法でロードしている方法のどちらかで、これを行うためのよりよい方法があるなら、まだ興味があります。

+0

これは機能しますが、各要素の最初のキーにある '{}'が欠けている点を除いては同じです。それは重要ですか? –

+0

概念的には、実際の最終結果を得るにはちょっとしたクリーンアップが必要でした。 まだ絶対パスの問題を理解しようとしています! – Merakel