2016-12-01 64 views
0

我有一個變量,它是一個數組[{'foo':1},{'bar':2}]。 我想把它具有以下哈希合併:{'baz':3}使用一組事實如我的輸出變量註冊爲(?):Ansible&Jinja2:將字典組合到列表的每個元素

[{'foo':1, 'baz':3},{'bar':2, 'baz':3}] 

我進去看了combine過濾器,但它僅適用時,我已經有一個哈希工作。在我的情況下,我有一個數組。

有沒有一種方法可以實現使用ansible?

回答

2

其實,我已經找到一種方法。 map可以與任何過濾器一起使用,並且論點爲逗號

- name: test 
    set_fact: 
    _test: "{{ [{'foo':1}, {'bar':2}] | map('combine', {'baz':3}) | list }}" 

產生後進行傳遞:

ok: [localhost] => { 
    "_test": [ 
     { 
      "baz": 3, 
      "foo": 1 
     }, 
     { 
      "bar": 2, 
      "baz": 3 
     } 
    ] 
} 
+0

是的,我忘了'地圖'過濾器。 –

0

的Jinja2沒有列表理解,但我認爲你可以使用setfor循環來實現它:

{% set outputarray = [] -%} 
{% for d in inputarray -%} 
    {% set r = d|combine({'baz': 3}) -%} 
    {{ ouputarray.append(r) and '' }} 
{%- endfor %} 
+0

,謝謝,我可以放置在我ansible劇本,或者我怎麼有這個?從未見過這樣的代碼 – Stephane

+0

您可以將它放在YAML文件的頂部,並在配置中引用'{{outputarray}}'。 –

+0

感謝您的幫助,我學到了一些東西。也發現了一個更簡單的解決方案:) – Stephane

相關問題