2017-07-27 72 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'这样的东西。 我标记你的答案是正确的。 –