![循环通过盐柱创建文件而无需知道密钥](https://linux22.com/image/740889/%E5%BE%AA%E7%8E%AF%E9%80%9A%E8%BF%87%E7%9B%90%E6%9F%B1%E5%88%9B%E5%BB%BA%E6%96%87%E4%BB%B6%E8%80%8C%E6%97%A0%E9%9C%80%E7%9F%A5%E9%81%93%E5%AF%86%E9%92%A5.png)
背景:我需要制作一个这样的 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