include_tasks 與 import_tasks 的差異
Ansible 2.4 以後引入了 include_tasks 與 import_tasks ,那這兩者的差異在哪裡呢?
在 Ansible 的文件網站裡有說明這部份
另外也可參閱:What’s the difference between include_tasks and import_tasks?
簡單的說明如下:
Includes 是動態的,執行到中途,再去載入,所以可以搭配變數做出變化,含括不同的檔案。例如
- include_tasks: prerequisites_{{ ansible_os_family | lower }}.yml
限制如下
--list-tags
無法顯示被含括檔案裡的 tags--list-tasks
無法顯示被含括檔案裡的 tasks- 無法使用通知去觸發被含括檔案裡的 handler
- 如果打算起始的 task 是在被含括檔案裡的話,那麼無法使用
--start-at-task
來指定起始的 task
Imports 是靜態的,在執行前就載入了,這就無法搭配變數做出變化。
- import_tasks: prepare_filesystem.yml
- import_tasks: install_prerequisites.yml
- import_tasks: install_application.yml
限制如下
- 無法搭配 with_* 或 loop 來使用
- 無法引入檔名相依於變數的檔案。
這兩種方法各有其優缺點, What’s the difference between include_tasks and import_tasks? 的這個回覆就說明的很仔細
我自己目前是都使用 include_tasks
比較多,未來應該要好好想一想,什麼時候用 import_tasks 會比較好些。