如何在剧本中创建数组字典

时间:2019-03-20 02:07:41

标签: ansible

我有一个这样定义的变量:

my_list:
  - key1: abc
    key2: xyz
    list1:
      - a
      - b
      - c
my_hash:
  a: p
  b: q
  c: r

在我的剧本中,我想将list1映射到my_hash中的对应条目。 即我想得到最终结果为...

my_list:
  - key1: abc
    key2: xyz
    list1:
      - a
      - b
      - c
    list2:
      - p
      - q
      - r
my_hash:
  a: p
  b: q
  c: r

1 个答案:

答案 0 :(得分:0)

设法得到我想要的。如果有人可以提供更优化的解决方案,我真的很感兴趣。

---
- hosts: localhost
  vars:
    mylist1:
      - key1: a
        key2: b
        mysublist:
          - x
          - y
          - z
      - key1: c
        key2: d
        mysublist:
          - t
          - u
          - y
          - z
    myhash:
      - hkey: t
        hval: testa
      - hkey: u
        hval: testb
      - hkey: x
        hval: testc
      - hkey: y
        hval: testd
      - hkey: z
        hval: teste
  tasks:
    - set_fact:
        tempdict: "{{tempdict|default({})|combine({item.hkey: item.hval})}}"
      loop: "{{myhash}}"
    - set_fact:
        testvar: {}
    - set_fact:
        testvar: "{{testvar|combine({item.key1: []})}}"
      loop: "{{mylist1}}"
    - set_fact:
        testvar: "{{testvar|combine({item[0].key1: testvar[item[0].key1] + [tempdict[item[1]]]})}}"
      loop: "{{mylist1|subelements('mysublist')}}"
    - debug:
        var: testvar