如何在 list 裡新增內容或合併兩個 list?

使用場景

寫作 Playbook 若遇到這兩種情況時,可以怎麼做呢?

  1. 新增內容到 list 裡
  2. 合併兩個 list

方法

方法相當簡單,使用 + 就可以。

新增內容到 list 時,可以這樣寫

- name: 配置 list
  set_fact:
    result_list: []

- name: 取得時間
  shell: date +%T
  register: shell_result

- name: 附加內容到 result_list
  set_fact:
    result_list: "{{ result_list + [ shell_result.stdout ]}}"
  
- name: 再次取得時間
  shell: sleep 3 && date +%T
  register: shell_result

- name: 附加內容到 result_list
  set_fact:
    result_list: "{{ result_list + [ shell_result.stdout ]}}"

若是要合併兩個 list,就是這樣寫

- name: 配置兩個 list 
  set_fact:
    list_one:
      - 1
      - 2
      - 3
    list_two:
      - 4
      - 5
      - 6

- name: 合併兩個 list
  set_fact:
    lists_merged: "{{ list_one + list_two }}"

結論

在做例如檢查性的 playbook 時,透過這個技巧,就可以持續把項目的檢查結果加到 list 裡。檢查的結過可以在最後用 template 去處理 list 來顯示就可以了。