ansible-playbook劇本
playbooks劇本
playbooks本身由以下各部分組成
- Tasks:任務,即通過task呼叫ansible的模板將多個操作組織在一個playbook中執行
- Variables:變數
- Template:模板
- Handlers:處理器,當changed狀態條件滿足時,(notify)觸發執行的操作
- Roles:角色
定義、引用變數
指定遠端主機sudo切換使用者
when條件判斷
在ansible中,提供的唯一一個通過的條件判斷是when指令,當when指令的值為true時,則該任務執行,否則不執行該任務。
when一個比較常見的應用場景是實現跳過某個主機不執行任務或者只有滿足條件
迭代
ansible提供了很多中迴圈結構,一般都命名為with_items,作為等同於loop迴圈
Template模組
Jinja是基於Python的模板引擎。Template類是Jinja的一個重要元件,可以看作是一個編譯過的模板檔案,用來產生目標文字,傳遞Python的變數給模板去替換模板中的標記。
tags模組
可以在一個playbook中為某個或某些任務定義“標籤”,在執行此playbook時通過ansible-playbook命令使用--tags選項能實現僅執行指定的tasks。
playbook還提供了一個特殊的tags為always。作用就是當使用always當tags的task時,無論執行哪一個tags時,定義有always的tags都會執行。
Roles模組
Ansible為了層次化、結構化地組織Playbook,使用了角色(roles),roles可以根據層次型結構自動裝載變數檔案、task以及handlers等。簡單來講,roles就是通過分別將變數、檔案、任務、模組及處理器放置於單獨的目錄中,並可以便捷地include它們。roles一般用於基於主機構建服務的場景中,但也可以用於構建守護程序等場景中。
roles 內各目錄含義解釋
●files
用來存放由 copy 模組或 script 模組呼叫的檔案。
●templates
用來存放 jinjia2 模板,template 模組會自動在此目錄中尋找 jinjia2 模板檔案。
●tasks
此目錄應當包含一個 main.yml 檔案,用於定義此角色的任務列表,此檔案可以使用 include 包含其它的位於此目錄的 task 檔案。
●handlers
此目錄應當包含一個 main.yml 檔案,用於定義此角色中觸發條件時執行的動作。
●vars
此目錄應當包含一個 main.yml 檔案,用於定義此角色用到的變數。
●defaults
此目錄應當包含一個 main.yml 檔案,用於為當前角色設定預設變數。
●meta
此目錄應當包含一個 main.yml 檔案,用於定義此角色的特殊設定及其依賴關係。
在一個 playbook 中使用 roles 的步驟:
(1)建立以 roles 命名的目錄
(2)建立全域性變數目錄(可選)
(3)在 roles 目錄中分別建立以各角色名稱命令的目錄
(4)在每個角色命令的目錄中分別建立files、handlers、tasks、templates、meta、defaults和vars目錄,用不到的目錄可以建立為空目錄,也可以不建立
(5)在每個角色的 handlers、tasks、meta、defaults、vars 目錄下建立 main.yml 檔案,千萬不能自定義檔名
(6)修改 site.yaml 檔案,針對不同主機去呼叫不同的角色
(7)執行 ansible-playbook
簡述Ansible角色
資料中心各種不同型別的主機,如web伺服器,資料庫伺服器,基於開發環境的伺服器。隨著時間的推移,具有處理所有這些情況的任務和人員的ansible playbook將變得龐大而複雜
- 角色允許將複雜的劇本組織成獨立的、更小的劇本和檔案
- 角色提供了一種從外部檔案載入任務、處理程式和變數的方法
- 角色也可關聯和引用靜態的檔案和模板
- 角色可以編寫成滿足普通用途需求,並且被重複利用
- 定義角色的檔案具有特定的名稱,並以嚴格的目錄結構進行組織