roles角色
角色是ansible自1.2版本引入的新特性,用于層次性、結構化地組織playbook。Roles能夠根據層次型結構自動裝載變量檔案、tasks以及handlers等。要使用roles隻需要在playbook中使用include指令即可。簡單來講,roles就是通過分别将變量、檔案、任務、模闆及處理器放置于單獨的目錄中,并可以便捷的include它們的一種機制。角色一般用于基于主機建構服務的場景中,但也可以是用于建構守護程序等場景中。
運維複雜的場景:建議使用roles,代碼複用度高
roles:多個角色的集合,可以将多個的role,分别放至roles目錄下的獨立子目錄中
Roles/
mysql/
httpd/
nginx/
redis/
Role各目錄作用:
roles/project/:項目名稱,有以下子目錄
files/:存放由copy或script子產品等調用的檔案
template
tasks/: 定義task,role的基本元素,至少應該包含一個名為main.yaml的檔案;其它的檔案需在此檔案中通過include進行包含。
handlers/: 至少應該包含一個名為main.yaml的檔案;其它的檔案需要在此檔案中通過include進行包含
vars/:定義變量,至少應該包含一個名為main.yaml的檔案,其它的檔案需要在此檔案中通過include進行包含
meta/: 定義目前角色的特殊設定及其依賴關系,至少應該包含一個名為main.yaml的檔案,其它的檔案需要在此檔案中通過include進行包含
default/: 設定預設變量時使用此目錄中的main.yaml檔案,比vars的優先級低
建立role
建立role的步驟:
(1)建立以roles命名的目錄
(2)在roles目錄中分别建立以各角色名稱命名的目錄,如webservers等
(3)在每個角色命名的目錄中分别建立files、handlers、meta、tasks、templates和vars目錄;用不到的目錄可以建立為空目錄,也可以不建立
(4)在playbook檔案中,調用各角色
playbook調用角色
調用角色方法1:
—
- hosts: websrvs
remote_user: root
roles:
- mysql
- memcached
- nginx
調用角色方法2:
鍵role用于指定角色名稱,後續的k/v用于傳遞變量給角色
調用角色方法3:
還可以基于條件測試實作角色調用
- hosts: all
- {role: nginx,username: nginx,when: ansible_distribution_major_version == ‘7’}
roles中tags使用
nginx-role.yaml
- {role: nginx, tags:[‘nginx’,‘web’]}, when: ansible_distribution_major_version == ‘6’}
- {role: httpd, tags: [‘httpd’,‘web’]}
- {role: mysql,tags:[‘mysql’,‘db’]}
- {role: mariadb,tags:[‘mariadb’,‘db’]}
ansible-playbook --tags=“nginx,httpd,mysql” nginx-role.yaml
roles實戰案例之Httpd
1.建立角色相關的檔案

需要在roles目錄下建立相關的子產品,比如httpd,如下圖所示
ansible-playbook roles/role_httpd.yaml
Roles子產品調用結構如圖所示。
如我們希望調用roles目錄中的git子產品,參考上圖目錄結構我們依次自上而下剖析代碼。
1)group_vars/all檔案:定義roles變量,編輯内容如下。
group_vars目錄下的檔案定義Roles中調用的變量,Roles對應調用該目錄同名檔案中定義的變量,檔案名為all的檔案定義的變量針對所有Roles生效。
2)userconf.yml檔案:設定調用Roles的git子產品,編輯内容如下。
roles為關鍵字,role:git表示調用roles的git子產品。如希望同時調用圖6-2中的user子產品,于該行下同級别對齊添加如下配置即可。
如需繼續添加功能,方式一樣。