SaltStack扩展了另一个支柱

时间:2017-05-03 21:21:07

标签: salt-stack

我正在使用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),但设置方式使得我不会写两次值(保持干燥!)。我还想覆盖其中一个参数的值。基本上,我试图将一个支柱延伸到另一个支柱。

最终结果 将是:

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',这是我尝试覆盖来自value3的{​​{1}}

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

1 个答案:

答案 0 :(得分:1)

由于您的common.app.service1变量只不过是一个常见的Python字典,因此能够使用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 }}