2016-07-14 9 views
0

私は、自動化の設定ファイルに新しいものを追加するときにできるだけ簡単にしようとしています。テンプレートを調整することなく、varsファイルから動的に生成したいと思います新しい行が必要になるたびにjarsen2のテンプレートをvarsから安全に制御する

私たちはルビーを使用していますので、YAMLの正式な設定です。これは私が別のインデント層を追加する必要がある場合を除いて、何の問題もなく動作します

example: 
    host: whatever 
    pass: 123 
    port: 577 
    and so on 

:ようなものを持っている

{% for variable,value in example.iteritems() %} 
    {{ variable|lower() }}: "{{ value }}" 
{% endfor %} 

とVARSファイル内:私はこのような何かを持っていることについて考えていました。

domain: "{u'somevalue': u'bla.com', u'othervalue': u'foo.com'}" 

VARSは、ファイル内のように同じ構造と内容を維持する方法:代わりに、それはのようなものを生成します設定で同じ構造を生成する

example: 
    host: whatever 
    pass: 123 
    port: 577 
    domain: 
    somevalue: bla.com 
    othervalue: foo.com 

ありがとうございました。

+0

また、{{例| to_nice_yaml}}しかし、これは "domain"部分を最初に印刷し、正しくインデントしますが、インデントなしで残りを印刷します。 (indent = 2、true)を追加すると、ドメインの子を除いて2つではなく4つの空白を持つすべてのインデントが正しく行われます。 – SeerKan

答えて

0

入力データ:

vars: 
    example: 
    host: whatever 
    pass: 123 
    port: 577 
    domain: 
     somevalue: bla.com 
     othervalue: foo.com 

4スペースのYAML template.j2:

example:{{ example | to_nice_yaml | comment(decoration=' ') }} 

結果:

example: 
    domain: 
     othervalue: foo.com 
     somevalue: bla.com 
    host: whatever 
    pass: 123 
    port: 577 

2スペースのYAML template.j2:

example:{{ example | to_yaml(indent=2, default_flow_style=False) | comment(decoration=' ') }} 

結果:dictのキーの順序があなたの入力と異なる場合がありますが、あなたはとにかくそれに頼るべきではありませんouputを

example: 
    domain: 
    othervalue: foo.com 
    somevalue: bla.com 
    host: whatever 
    pass: 123 
    port: 577 

注意。

+0

残念ながら、すべてのメソッドで同じ問題が発生します。子供たちはそこに4を追加し、無効なyamlファイルになります。 – SeerKan

+0

@SeerKanサンプルで回答を更新しました。何が問題なのかをお知らせください。 –

+0

申し訳ありません、私は離れていました。今週あなたの変更をテストしようとすると、あなたの答えを正しいものとして選択します。ありがとうございました。 – SeerKan

関連する問題