Ansible& Jinja2:将字典与列表的每个元素组合在一起

时间:2016-12-01 00:44:22

标签: jinja2 ansible-playbook

我有一个数组[{'foo':1},{'bar':2}]的变量。 我想将它与以下哈希结合使用:{'baz':3}使用set fact(?),例如我的输出注册变量是:

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

我查看了combine过滤器,但只有当我已经有哈希才能使用时它才有用。在我的情况下,我有一个数组。

有没有办法用ansible实现这个目标?

2 个答案:

答案 0 :(得分:3)

实际上,我找到了一种方法。 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
        }
    ]
}

答案 1 :(得分:0)

Jinja2没有列表理解,但我认为你可以使用for{% set outputarray = [] -%} {% for d in inputarray -%} {% set r = d|combine({'baz': 3}) -%} {{ ouputarray.append(r) and '' }} {%- endfor %} 循环来实现它:

$s = $line -replace '|', ','