SaltStack 扩展了另一个支柱

SaltStack extending another pillar

我正在使用 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',这是我试图覆盖来自 [=19] 的 value3 =].

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

由于您的 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 }}