如何把 block 放在回圈裡?

因為之前寫程式的經驗,很直覺的想可以在 block 加上 loop,像這樣

- set_fact:
    user_list:
    - John
    - Mary
    - Jane
- block:
  - debug:
      msg: "start of loop"
  - debug:
      msg: "Hello {{ item }}"
  - debug:
      msg: "end of loop"
  loop: "{{ user_list }}"

但很遺憾,不能這樣使用,Ansible 會抱怨你使用了錯誤的語法。

後來才找到可以用另外一種寫法來做到:How to loop blocks of code in Ansible

作法是這樣的,把 block 裡的 tasks 搬到另外一個 yaml 檔案裡,例如 block1.yml

---
# block1.yml
- debug:
    msg: "start of loop"
- debug:
    msg: "Hello {{ item }}"
- debug:
    msg: "end of loop"

然後原來的回圈改用 include_tasks

- set_fact:
    user_list:
    - John
    - Mary
    - Jane
- include_tasks: block1.yml
  loop: "{{ user_list }}"

雖然需要拆分到另外一個檔案,但改寫為這樣就達到目的了。