角色類似於一些屬性的集合。
比如webserver dbserver。不同的服務器需要安裝不同的軟件,我們需要一種快捷的方式讓服務器儘快上線。我們可以將每一個種類的服務器作爲一個角色,在角色中創建該角色需要執行的任務。
從ansible的角度來看,一個角色就是一個目錄,在目錄中有該角色應該有的全部屬性。
角色集合:
roles/
mysql/
httpd/
nginx/
mysql httpd nginx都是角色。
比如mysql。在mysql下還需要有包含屬性的目錄:
mysql/
files/ 存放由copy或script模塊等調用的文件
templates/ template模塊 查找所需要模板文件的目錄
tasks/ 至少應該包含一個名爲main.yml的文件 其他文件需要在main.yml中通過Include進行包含
handlers/ 至少應該包含一個名爲main.yml的文件其他文件需要在main.yml中通過Include進行包含
vars/ 至少應該包含一個名爲main.yml的文件其他文件需要在main.yml中通過Include進行包含
meta/ 定義當前角色的特殊設定及其依賴關係 至少應該包含一個名爲main.yml的文件其他文件需要在main.yml中通過Include進行包含
default/ 爲當前角色設定默認變量時使用此目錄
如果使用roles功能,那麼在ansible-playbook在執行腳本時會自動的到ansible目錄下找尋相關文件。
測試一個實例
第一步:創建所需的目錄
第二步:查看角色目錄
第三步:編輯任務主文件
src指定的文件會在telnet/templates目錄中查找
第四步:創建腳本
第五步:試運行
第六步:運行
第七步:檢查
再做一個實例
由於配置文件發生改變,就生成一個日誌文件,就在上面的實例基礎上做修改
第一步:修改.j2文件
第二步:創建被調用的文件
第三步:修改tasks主文件
第四步:試運行
第五步:運行
第六步:檢查
優化上面的配置
在第二次執行腳本的時候,其實telnet的程序已經安裝過了,可以跳過這個任務。通過tags指定需要執行的任務
第一步:修改.j2文件
第二步:修改tasks主文件
第三步:試運行
這裏沒有執行安裝telnet的任務
調用變量的實例
第一步:定義變量
第二步:修改.j2文件
第三步:試運行
第四步:執行
第五步:遠端主機檢查
第六步:重新執行命令,不過這次帶上參數
第七步:在遠端主機上檢查結果
這裏要證明-e指定的變量值要優先於變量文件中的變量值
通過調用角色傳遞變量
第一步:修改腳本文件
第二步:執行:
第三步:在遠端主機上檢查
調用角色時加入判斷語句
第一步:修改腳本文件
第二步:試運行
第三步:現在把條件改成 6
第四步:試運行
由於遠端主機是7,所以跳過任務