SaltStack如何在pillar中使用字典并在模板文件中循环这些值?

2024-06-16 14:01:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力使我们的配置更模块化。目前,我们大多数情况下每个环境都有硬编码的模板文件,这些文件与jinja处于init状态的每个环境相匹配。我正在分解状态、配置,并添加一些需要在所有环境中保持相同配置值的默认值。

下面是我的支柱的一个例子:

/../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

我需要做的是在pillar中添加一个值字典,并在camel.xml.template中遍历默认值列表,构建所有环境中的默认路由。支柱还将存储特定于环境的值,我将以非常类似的方式将这些值添加到文件中。

任何帮助都非常感谢。我尝试了很多不同的方法,要么得到一个错误,要么从文件中删除默认行。

谢谢!


Tags: 文件tofromref模板default环境状态
1条回答
网友
1楼 · 发布于 2024-06-16 14:01:40

你对支柱的定义有一些不一致之处。

使用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"
    }
  }

你应该把你的山药改成

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的键

相关问题 更多 >