循环通过盐柱创建文件而无需知道密钥

循环通过盐柱创建文件而无需知道密钥

背景:我需要制作一个这样的 XML 文件:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="BaseOU" value="DC=myplace,DC=wan" />
    <add key="OurOU" value="OU=Users,DC=myplace,DC=wan" />
    <add key="EmailServer" value"email.server.com" />
    <add key="EmailRecipient" value"[email protected]" />
  </appSettings>
</configuration>

我想动态构建此文件,这样我们就可以简单地向 pillar 添加新变量,而无需更改托管文件的 jinja 模板。我可以循环遍历 pillar 键/值对而无需知道键吗?

例如,假设我的支柱.sls看起来像这样:

scriptvars:
  BaseOU: DC=myplace,DC=wan
  OurOU: OU=Users,DC=myplace,DC=wan
  EmailServer: email.server.com
  EmailRecipient: [email protected]

我创建了一个管理文件 C:\script-config.xml 的状态,源是jinja 模板如同:

<?xml version="1.0"?>
<configuration>
  <appSettings>
  {% for unknownPillarKey in pillar.get['scriptvars'] %}
    <add key="unknownPillarKey" value="{{ pillar['unknownPillarKey'] }}" />
  {% endfor %}
  </appSettings>
</configuration>

问题:如何在我的 pillar.sls 中向 scriptvars 添加新条目,并让 jinja 模板中的 for 循环拾取它(当我应用状态时 - 这不是关于信标/反应堆的问题)并将其添加到托管文件中?我认为问题出在我的 jinja for 循环或语法上,但我在网上找不到任何信息。非常感谢您的任何见解。

答案1

我找到了一个答案,它比我想象的要容易得多(不幸的是,在线搜索并没有太大帮助,因为支柱几乎总是讨论键和值)。

它非常简单,如下所示:

<?xml version="1.0"?>
<configuration>
  <appSettings>
  {% for key, value in pillar['scriptvars'].items() %}
    <add key="{{ key }}" value="{{ value }}" />
  {% endfor %}
  </appSettings>
</configuration>

重要的提示:.items() 适用于 salt 的 python 3 版本。如果您使用的是 python 2 版本,则应升级 - 它是 2019。

感谢这些为我指明了正确的方向:

https://stackoverflow.com/questions/31854153/how-to-get-key-value-in-salt

如何使用 saltstack 从 pillar 创建盐?

相关内容