Ansible roles角色详解
roles角色
角色是ansible自1.2版本引入的新特性,用于層次性、結構化地組織playbook。roles能夠根據層次型結構自動裝載變量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。簡單來講,roles就是通過分別將變量、文件、任務、模板及處理器放置于單獨的目錄中,并可以便捷地include它們的一種機制。角色一般用于基于主機構建服務的場景中,但也可以是用于構建守護進程等場景中
運維復雜的場景:建議使用roles,代碼復用度高
roles:多個角色的集合, 可以將多個的role,分別放至roles目錄下的獨立子目錄中
roles/
mysql/
httpd/
nginx/
redis/
Ansible Roles目錄編排
roles目錄結構如下所示
每個角色,以特定的層級目錄結構進行組織
roles目錄結構:
playbook.yml
roles/
project/
tasks/
files/
vars/
templates/
handlers/
default/
meta/
Roles各目錄作用
roles/project/ :項目名稱,有以下子目錄
- files/ :存放由copy或script模塊等調用的文件
- templates/:template模塊查找所需要模板文件的目錄
- tasks/:定義task,role的基本元素,至少應該包含一個名為main.yml的文件;其它的文件需要在此文件中通過include進行包含
- handlers/:至少應該包含一個名為main.yml的文件;其它的文件需要在此文件中通過include進行包含
- vars/:定義變量,至少應該包含一個名為main.yml的文件;其它的文件需要在此文件中通過include進行包含
- meta/:定義當前角色的特殊設定及其依賴關系,至少應該包含一個名為main.yml的文件,其它文件需在此文件中通過include進行包含
- default/:設定默認變量時使用此目錄中的main.yml文件,比vars的優先級低
創建 role
創建role的步驟
(1) 創建以roles命名的目錄
(2) 在roles目錄中分別創建以各角色名稱命名的目錄,如webservers等
(3) 在每個角色命名的目錄中分別創建files、handlers、meta、tasks、templates和vars目錄;用不到的目錄可以創建為空目錄,也可以不創建
(4) 在playbook文件中,調用各角色
針對大型項目使用Roles進行編排
范例:roles的目錄結構
playbook調用角色
調用角色方法1:
--- - hosts: websrvsremote_user: rootroles:- mysql- memcached- nginx?
調用角色方法2:
鍵role用于指定角色名稱,后續的k/v用于傳遞變量給角色
--- - hosts: allremote_user: rootroles:- mysql- { role: nginx, username: nginx }調用角色方法3:
還可基于條件測試實現角色調用
--- - hosts: allremote_user: rootroles:- { role: nginx, username: nginx, when: ansible_distribution_major_version == ‘7’ }roles 中 tags 使用
#nginx-role.yml --- - hosts: websrvsremote_user: rootroles:- { 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.yml參考鏈接:http://www.yunweipai.com/34669.html
總結
以上是生活随笔為你收集整理的Ansible roles角色详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ansible管理节点过多导致的超时问题
- 下一篇: Scala 函数声明及调用案例详解