將 List 轉置為 dict 的 list

需求是這樣子的,需要把 List 裡的元素轉置為 dict,再放到 List 裡。

也就是

my_users:
- aaa
- bbb
- ccc

要轉換為

my_users:
- Name: aaa
- Name: bbb
- Name: ccc

用 Ansible 該怎麼做呢?看這篇:Using filters to manipulate data 看了好久,都沒找到適合的 filter…

試了好一會,終於試出來,在這邊分享。這個方法需要使用 loop ,再搭配 List 可以相加的特性。Playbook 如下

- name: Transform data
  vars:
    orig_users:
    - aaa
    - bbb
    - ccc
    my_users: []
  set_fact:
    my_users: "{{ my_users + [{} | combine({'Name': item})] }}"
  loop: "{{ orig_users }}"

說明如下:

  1. 利用 combine 這個 filter 來組出 dict
  2. 利用 loop 去 iterate orig_users
  3. my_users + [{} | combine({'Name': item})] 來做 List append

用這樣的方式,就可以去做出轉置了。

參考資料: