2017-12-18 472 views
2

有没有办法将Ansible Playbook中的对象数组映射到不同的对象数组?比方说,我们有一个源阵列之中:Ansible - 将对象数组映射到不同的对象数组

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内部使用。

+0

请检查https://stackoverflow.com/questions/42152192/ansible-how-to-apply-defaults-to-each-complex-arguments-of-a-list/42152622#42152622 –

回答

0

正如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 }}