Ansible - 将对象数组映射到不同的对象数组

问题描述 投票:3回答:1

有没有办法将Ansible Playbook中的对象数组映射到不同的对象数组?假设我们有一个源数组:

arr:
  - value: a
  - value: b
  - value: c

我们想要的是根据第一个数组中的对象获得一个不同的数组,让我们说:

arr2:
  - const: 1
    var: a
  - const: 1
    var: b
  - const: 1
    var: c

这可以通过以下元素模板来实现:

const: 1
var: {{ value }}

有没有办法将这样的模板应用于数组中的每个元素?我没有找到合适的map过滤器,因为lookup('template', ...)不能在map内使用。

ansible yaml jinja2 templating
1个回答
1
投票

正如Konstantin Suvorov在评论中提到的那样,可以使用递归数组构建来完成。我就是这样做的:

#role test
---
- hosts: localhost
  gather_facts: no
  vars:
    arr:
      - value: a
      - value: b
      - value: c

  tasks:
    - set_fact:
        arr2: "{{ (arr2 | default([])) + [ lookup('template', 'template.yaml.j2') | from_yaml ] }}"
      with_items: "{{ arr }}"
    - debug:
        msg: "{{ arr2 }}"


#template.yaml.j2
const: 1
var: {{ item.value }}
© www.soinside.com 2019 - 2024. All rights reserved.