2017-07-27 35 views
0

使用for循環時遇到我的jinja2模板問題。我想我只是啞巴得到正確的語法。Jinja2循環加鹽堆

{% for options in salt['pillar.get']('nexus.file.nexus.vmoptions') %} 
//trying to access a yaml list (posted below)` 
{% for addjavavariables in options %} 
//trying to get the lists out of the options 
    {{ nexus.file.nexus.vmoptions.addjavavariables[0] }} 
//trying to write every single line from my list 
    {{ addjavavariables }}: 
    - {{ addjavavariables }} 
    {% endfor %} 
{% endfor %} 

的YAML看起來是這樣的:

nexus:  
file: 
    nexus: 
    vmoptions: 
     addjavavariables: 
     - 'Xms1200M' 
     - 'Xmx1200M' 
     - 'XX:MaxDirectMemorySize=2G' 
     - 'XX:+UnlockDiagnosticVMOptions' 
     - 'XX:+UnsyncloadClass' 
     - 'XX:+LogVMOutput' 
     - 'XX:LogFile=../sonatype-work/nexus3/log/jvm.log' 
     - 'Djava.net.preferIPv4Stack=true' 
     - 'Dkaraf.home=.' 
     - 'Dkaraf.base=.' 
     - 'Dkaraf.etc=etc/karaf' 
     - 'Djava.util.logging.config.file=etc/karaf/java.util.logging.properties' 
     - 'Dkaraf.data=../sonatype-work/nexus3' 
     - 'Djava.io.tmpdir=../sonatype-work/nexus3/tmp' 
     - "Dkaraf.s'tartLocalConsole=false" 
     - 'Djava.util.prefs.userRoot=/home/nexus/.java' 

最後的文件應該看起來像

-Xms1200M 
-Xmx1200M 
-XX:MaxDirectMemorySize=2G 
-XX:+UnlockDiagnosticVMOptions 
-XX:+UnsyncloadClass 
-XX:+LogVMOutput 
-XX:LogFile=../sonatype-work/nexus3/log/jvm.log 
-Djava.net.preferIPv4Stack=true 
-Dkaraf.home=. 
-Dkaraf.base=. 
-Dkaraf.etc=etc/karaf 
-Djava.util.logging.config.file=etc/karaf/java.util.logging.properties 
-Dkaraf.data=../sonatype-work/nexus3 
-Djava.io.tmpdir=../sonatype-work/nexus3/tmp 
-Dkaraf.s'tartLocalConsole=false 
-Djava.util.prefs.userRoot=/home/nexus/.java 

我的問題是,我沒有得到任何東西到文件。它也不會進入循環。任何人都可以給我一個提示,我可以如何將所有項目放入列表中,並將開始的短劃線放入文件中?

回答

1

pillar.get的路徑分隔符是:,而不是.,因此您應該使用salt['pillar.get']('nexus:file:nexus:vmoptions')
但你也可以簡單地使用pillar['nexus']['file']['nexus']['vmoptions']

一個奇怪的事情是,你有2個for循環,但只有1名單遍歷。在nexus:file:nexus:vmoptions字典中是否還有其他鍵?

獲得所需要的結果,我會去的:

{% for addjavavariable in salt['pillar.get']('nexus:file:nexus:vmoptions:addjavavariables', []) %} 
-{{ addjavavariable }} 
{% endfor %} 
+0

非常感謝您!它運作良好。 我以爲我不得不迭代列表中的每個項目來獲取項目。我不知道我可以去'addjavavariables'並自動獲取每個項目。我以爲我總是必須去找像'addjavavariables [index] .value'這樣的東西。 我標記你的答案是正確的。 –