角色相似於一些屬性的集合。mysql
好比webserver dbserver。不一樣的服務器須要安裝不一樣的軟件,咱們須要一種快捷的方式讓服務器儘快上線。咱們能夠將每個種類的服務器做爲一個角色,在角色中建立該角色須要執行的任務。nginx
從ansible的角度來看,一個角色就是一個目錄,在目錄中有該角色應該有的所有屬性。web
角色集合:sql
roles/服務器
mysql/ide
httpd/測試
nginx/優化
mysql httpd nginx都是角色。spa
好比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,因此跳過任務