本文主要總結下ansible裏task調用的方法有哪些和它們的主要區別html
隨着要管理的服務不斷增多,咱們又沒將task放到roles裏,會發現playbook文件愈來愈大,內容也愈來愈多,管理起來也很複雜。app
這時咱們能夠將這些task分解到不少文件中,經過include_tasks和import_tasks方法進行task之間的調用,說直白點這兩個方法做用就是鏈接不一樣文件裏的task。ide
在本篇文章裏,假如task_A include task_B,那麼咱們說task_A是父task,task_B是子task。ui
可能有點懵,舉例說明spa
下面兩個例子是test.yml裏的task調用test2.yml,不一樣之處是一個使用import_tasks另外一個使用include_tasks 3d
import_tasks:在執行tasks以前,ansible解釋器會先加載test.yml裏的變量同時再加載test2.yml裏的變量,那麼ansible_os_family變量會有一個覆蓋現象產生,最終的參數應爲「BlackHat」,因此當test.yml裏執行when語句時,ansible_os_family被斷定爲「BlackHat」,when的判斷結果爲false,也就不會調用test2.yml了htm
執行結果以下,test2.yml裏的task都被skip了:blog
include_tasks:ansible會在徹底執行完test.yml裏的task後纔會加載test2.yml裏的變量,因此當執行when語句時,ansible_os_family的參數應爲「RedHat」,此時when語句判斷結果是true,也就是test2.yml裏的tasks會被執行。ip
將第一張圖test.yaml裏的import_tasks換成include_tasks,執行結果以下:it
咱們發現自test2.yml裏的task被執行了,而且在test2.yml裏ansible_os_family的參數變爲了「BlackHat」。
這就是include_tasts和import_tasks方法的第一個區別。
這個區別比較簡單,直接上示例:
當調用的文件名稱有變量時,使用include_tasks方法:
可以正常調用test2.yml,執行結果以下:
當使用import_tasks方法時,執行報錯。
ansible也給出了錯誤緣由,當使用static include時,是不能使用變量的:
這就是include_tasts和import_tasks方法的第二個區別。
https://docs.ansible.com/ansible/2.5/user_guide/playbooks_reuse.html#differences-between-static-and-dynamic
https://docs.ansible.com/ansible/2.5/user_guide/playbooks_conditionals.html#applying-when-to-roles-imports-and-includes
歡迎你們關注個人公衆號: