我正在使用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。任何想法都会有所帮助。谢谢!
答案 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 }}