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 }}
我正在使用 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 }}