首页 文章

SaltStack扩展了另一个支柱

提问于
浏览
0

我正在使用SaltStack,我正在尝试从另一个Pillar配置中重用嵌套字典的值 . 这是我正在尝试做的一个简单示例:

假设我有 pillar/app/common.sls ,其中包含以下内容:

app:
  lookup:
    custom1: 'change the default'
    custom2: 'change the default'
  service1:
    value1: 'foo'
    value2: 'bar'
    list1:
      - apple
      - banana
    value3: 'xen'

我的目标是在同一台机器上有一个新服务(并且YAML键是 service2 ),但是以这样的方式设置,以便我试图将一个支柱扩展到另一个支柱 .

end result 将是:

app:
  lookup:
    custom1: 'change the default'
    custom2: 'change the default'
  service1:
    value1: 'foo'
    value2: 'bar'
    list1:
      - apple
      - banana
    value3: 'xen'
  service2:
    value1: 'foo'
    value2: 'bar'
    list1:
      - apple
      - banana
    value3: 'future'

我用 pillar/app/someserver.sls 尝试了以下内容:

{% import_yaml "app/common.sls" as common %}

app:
  service2:
    {{ common.app.service1 }}
    value3: 'future'

我发现 {{ common.app.service1 }} 成功渲染,但它不喜欢额外的 value3: 'future' ,这是我试图覆盖来自 common.slsvalue3 .

我在Ubuntu Xenial 16.04.2上使用Salt 2016.11.4 . 任何想法都会有所帮助 . 谢谢!

1 回答

  • 1

    由于你的 common.app.service1 变量只不过是一个普通的Python dict,你应该可以使用 update 来修改它 . 之后,您可以使用Jinja的 yaml 过滤器将其渲染到新的支柱中:

    {% import_yaml "app/common.sls" as common %}
    {% set service2 = common.app.service1.copy() %}
    {% do service2.update({value3: 'future'}) %}
    
    app:
      service2: {{ service2 | yaml }}
    

相关问题