2017-05-03 26 views
0

我正在使用SaltStack,我試圖從另一個Pillar配置中重新使用嵌套字典的值。這裏是什麼,我試圖做一個簡單的例子:SaltStack擴展另一個支柱

說我有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來自common.sls

我在Ubuntu Xenial 16.04.2上使用Salt 2016.11.4。任何想法都會有所幫助。謝謝!

回答

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 }} 
+0

這樣做的伎倆,謝謝! –