Ansible 小手冊系列 二十三(動態和靜態包含)

Ansible有兩種可重用內容的操作模式:動態和靜態。
在Ansible 2.0階段使用static來設置操作模式,Ansible 2.4則引入了include和import的概念。

如果您使用import*包含Task(import_playbookimport_tasks等),它將是靜態的。
如果您使用include*包含Task(include_tasksinclude_role等),它將是動態的。

使用include包含Task(用于task文件和Playbook級包括)仍然可用,但現在被認為已被棄用。

靜態和動態之間的差異


Ansible預處理Playbook解析期間的所有靜態導入,而動態包含是在運行期間遇到該任務時處理的。

當涉及Ansible task選項,如tags和when:

對于靜態導入,父任務選項將被復制到import中包含的所有子任務。
對于動態包含,任務選項僅在評估時應用于動態任務,不會被復制到子任務。

優缺點


使用include*語句的主要優點是循環。當循環與include*一起使用時,包含的任務或角色將為循環中的每個項目執行一次。

import*語句相比,使用include*有一些限制:

  • 僅存在于動態包含內的標簽不會顯示在-list-tags輸出中。
  • 僅存在于動態包含內的任務不會顯示在-list-tasks輸出中。
  • 您不能使用notify來觸發來自動態包含內部的處理程序名稱。
  • 您不能使用--start-at-task開始執行動態包含內的任務。

與動態相比,使用import*也可能有一些限制:

  • 如上所述,循環不能用于導入。
  • 當使用目標文件或角色名稱的變量時,不能使用來自庫存源(主機/組變量等)的變量。

總而言之,沒有使用with的包含,就使用import,使用了with,那就用include。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容