使用 Saltstack 的 Jinja2 循环
Jinja2 Loops with Saltstack
我的 jinja2 模板在使用 for 循环时遇到问题。我想我只是为了获得正确的语法而变得愚蠢。
{% 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
我的问题是,我没有在文件中输入任何内容。它也根本不会进入循环。任何人都可以给我一个提示,我如何将列表中的所有项目与一个开始破折号放入文件中?
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 %}
我的 jinja2 模板在使用 for 循环时遇到问题。我想我只是为了获得正确的语法而变得愚蠢。
{% 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
我的问题是,我没有在文件中输入任何内容。它也根本不会进入循环。任何人都可以给我一个提示,我如何将列表中的所有项目与一个开始破折号放入文件中?
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 %}