SaltStack - 如何在 pillar 中使用字典并循环遍历模板文件中的这些值?
SaltStack - How to use a dictionary in pillar and loop through those values in template file?
我正在尝试使我们的配置更加模块化。目前,我们主要针对每个环境硬编码模板文件,这些模板文件与处于初始状态的 jinja 的每个环境相匹配。我正在拆分状态、配置,并添加一些需要在所有环境中以相同配置值维护的默认值。
这是我的支柱示例:
/../pillars/amq/amq.sls
default_routes:
Queue1:
- from_uri: 'activemq:fromSomeURI1'
- process_ref: 'processorName1'
- to_uri: 'activemq:toSomeOutURI1'
Queue2:
- from_uri: 'activemq:fromSomeURI2'
- process_ref: 'processorName2'
- to_uri: 'activemq:toSomeOutURI2'
这是我的模板文件的示例:
/../salt/amq/conf/camel.xml.template
lines lines lines
lines lines lines
...
{% for route, args in pillar.get('default_routes', {}).items() %}
<route>
<from uri="{{ route.from_uri }}"/>
<process ref="{{ route.process_ref }}"/>
<to uri="{{ route.to_uri }}"/>
</route>
{% endfor %}
...
lines lines lines
lines lines lines
我需要做的是向支柱添加一个值字典,并遍历该默认值列表,从 camel.xml.template 中构建跨所有环境的默认路由。然后支柱还将存储特定于环境的值,我将以非常相似的方式将这些值添加到文件中。
非常感谢任何帮助。我已经尝试了很多不同的东西,但要么出现错误,要么默认行已从文件中删除。
谢谢!
您对支柱的定义存在一些不一致之处。
使用 this tool,将您的 YAML 翻译成 Python 得到
"default_routes": {
"Queue1": [
{
"from_uri": "activemq:fromSomeURI1"
},
{
"process_ref": "processorName1"
},
{
"to_uri": "activemq:toSomeOutURI1"
}
],
"Queue2": [
{
"from_uri": "activemq:fromSomeURI2"
},
{
"process_ref": "processorName2"
},
{
"to_uri": "activemq:toSomeOutURI2"
}
]
}
当我假设你的意思是
"default_routes": {
"Queue1": {
"to_uri": "activemq:toSomeOutURI1",
"process_ref": "processorName1",
"from_uri": "activemq:fromSomeURI1"
},
"Queue2": {
"to_uri": "activemq:toSomeOutURI2",
"process_ref": "processorName2",
"from_uri": "activemq:fromSomeURI2"
}
}
您应该将 YAML 更改为
default_routes:
Queue1:
from_uri: 'activemq:fromSomeURI1'
process_ref: 'processorName1'
to_uri: 'activemq:toSomeOutURI1'
Queue2:
from_uri: 'activemq:fromSomeURI2'
process_ref: 'processorName2'
to_uri: 'activemq:toSomeOutURI2'
但即便如此,你的模板还是有缺陷
{% for route, args in pillar.get('default_routes', {}).items() %}
此行会将 route
设置为键名,将 args
设置为字典。所以第一次,route
将是 Queue1
而 args
将是字典的其余部分。
你必须将 {{ route.from_uri }}
更改为 {{ args.from_uri }}
因为 args 是实际的字典,它有像 from_uri
这样的键
我正在尝试使我们的配置更加模块化。目前,我们主要针对每个环境硬编码模板文件,这些模板文件与处于初始状态的 jinja 的每个环境相匹配。我正在拆分状态、配置,并添加一些需要在所有环境中以相同配置值维护的默认值。
这是我的支柱示例:
/../pillars/amq/amq.sls
default_routes:
Queue1:
- from_uri: 'activemq:fromSomeURI1'
- process_ref: 'processorName1'
- to_uri: 'activemq:toSomeOutURI1'
Queue2:
- from_uri: 'activemq:fromSomeURI2'
- process_ref: 'processorName2'
- to_uri: 'activemq:toSomeOutURI2'
这是我的模板文件的示例:
/../salt/amq/conf/camel.xml.template
lines lines lines
lines lines lines
...
{% for route, args in pillar.get('default_routes', {}).items() %}
<route>
<from uri="{{ route.from_uri }}"/>
<process ref="{{ route.process_ref }}"/>
<to uri="{{ route.to_uri }}"/>
</route>
{% endfor %}
...
lines lines lines
lines lines lines
我需要做的是向支柱添加一个值字典,并遍历该默认值列表,从 camel.xml.template 中构建跨所有环境的默认路由。然后支柱还将存储特定于环境的值,我将以非常相似的方式将这些值添加到文件中。
非常感谢任何帮助。我已经尝试了很多不同的东西,但要么出现错误,要么默认行已从文件中删除。
谢谢!
您对支柱的定义存在一些不一致之处。
使用 this tool,将您的 YAML 翻译成 Python 得到
"default_routes": {
"Queue1": [
{
"from_uri": "activemq:fromSomeURI1"
},
{
"process_ref": "processorName1"
},
{
"to_uri": "activemq:toSomeOutURI1"
}
],
"Queue2": [
{
"from_uri": "activemq:fromSomeURI2"
},
{
"process_ref": "processorName2"
},
{
"to_uri": "activemq:toSomeOutURI2"
}
]
}
当我假设你的意思是
"default_routes": {
"Queue1": {
"to_uri": "activemq:toSomeOutURI1",
"process_ref": "processorName1",
"from_uri": "activemq:fromSomeURI1"
},
"Queue2": {
"to_uri": "activemq:toSomeOutURI2",
"process_ref": "processorName2",
"from_uri": "activemq:fromSomeURI2"
}
}
您应该将 YAML 更改为
default_routes:
Queue1:
from_uri: 'activemq:fromSomeURI1'
process_ref: 'processorName1'
to_uri: 'activemq:toSomeOutURI1'
Queue2:
from_uri: 'activemq:fromSomeURI2'
process_ref: 'processorName2'
to_uri: 'activemq:toSomeOutURI2'
但即便如此,你的模板还是有缺陷
{% for route, args in pillar.get('default_routes', {}).items() %}
此行会将 route
设置为键名,将 args
设置为字典。所以第一次,route
将是 Queue1
而 args
将是字典的其余部分。
你必须将 {{ route.from_uri }}
更改为 {{ args.from_uri }}
因为 args 是实际的字典,它有像 from_uri