天天看點

ansible中roles角色

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.建立角色相關的檔案

ansible中roles角色

需要在roles目錄下建立相關的子產品,比如httpd,如下圖所示

ansible中roles角色
ansible中roles角色
ansible中roles角色
ansible中roles角色

ansible-playbook roles/role_httpd.yaml

Roles子產品調用結構如圖所示。

ansible中roles角色

如我們希望調用roles目錄中的git子產品,參考上圖目錄結構我們依次自上而下剖析代碼。

1)group_vars/all檔案:定義roles變量,編輯内容如下。

ansible中roles角色

group_vars目錄下的檔案定義Roles中調用的變量,Roles對應調用該目錄同名檔案中定義的變量,檔案名為all的檔案定義的變量針對所有Roles生效。

2)userconf.yml檔案:設定調用Roles的git子產品,編輯内容如下。

ansible中roles角色

roles為關鍵字,role:git表示調用roles的git子產品。如希望同時調用圖6-2中的user子產品,于該行下同級别對齊添加如下配置即可。

ansible中roles角色

如需繼續添加功能,方式一樣。

繼續閱讀