【问题标题】:SaltStack extending another pillarSaltStack 延伸另一个支柱
【发布时间】:2017-05-03 21:21:07
【问题描述】:

我正在使用 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',这是我尝试覆盖来自common.slsvalue3

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

【问题讨论】:

    标签: salt-stack


    【解决方案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 }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 2019-07-26
      • 1970-01-01
      相关资源
      最近更新 更多