Jinja2与Saltstack的循环

时间:2017-07-27 09:07:18

标签: python templates jinja2 salt

使用for循环时,我遇到了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 个答案:

答案 0 :(得分: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 %}