1. 程式人生 > >ansible基礎四

ansible基礎四

機構 tar 場景 變量 mage sbin files blog roles

roles《角色》介紹

ansilbe自1.2版本引入的新特性,用於層次性、結構化地組 織playbook。roles能夠根據層次型結構自動裝載變量文件、 tasks以及handlers等。要使用roles只需要在playbook中使用 include指令即可。簡單來講,roles就是通過分別將變量、文件 、任務、模板及處理器放置於單獨的目錄中,並可以便捷地 調用它們的一種機制。角色一般用於基於主機構建服務的場 景中,但也可以是用於構建守護進程等場景中

復雜場景:建議使用roles,代碼復用度高

1)變更指定主機或主機組
2)如命名不規範維護和傳承成本大
3)某些功能需多個Playbook,通過調用即可實現

每個角色都要以特定的目錄結構進行組織:

1),調用roles的playbook必須要跟roles目錄是平級關系
2),roles目錄裏面存放所有角色,所謂的角色可以是你需要搭建的某一個服務也可以是某一個任務
3),而每一個角色目錄下面都必須要有tasks這個目錄(任務的目錄)
4),而每個teasks目錄下面也必須要有main.yml這個文件,main.yml文件相當於調用teasks目錄下的所有任務的一個必須要有的文件。


roles目錄結構

技術分享圖片

實現role步驟:

(1) 創建以roles命名的目錄

mkdir  roles

(2) 在roles目錄中分別創建以各角色名稱命名的目錄,如 httpd,nginx,webservers等

(3) 在每個角色命名的目錄中分別創建files、handlers、 meta、tasks、templates和vars目錄;用不到的目錄可以創

(4) 在playbook文件中,調用各角色

示例:

    nginx-role.yml roles/ 
    └── nginx     
    ├── files     
    │   └── main.yml     
    ├── tasks     
    │   ├── groupadd.yml     
    │   ├── install.yml      
    │   ├── main.yml     
    │   ├── restart.yml     
    │   └── useradd.yml     
    └── vars         └── main.yml

groupadd.yml文件內容

    #cat roles/nginx/tasks/useradd
    - name: add group
        group: name=nginx

useradd.yml文件內容

#cat roles/nginx/tasks/useradd
    - name: add user
        user: name=nginx group=nginx system=yes shell=/sbin/nologin

install.yml文件內容

#cat roles/nginx/tasks/install.yml
    - name: install nginx
        yum: name=nginx 

start.yml文件內容

    #cat roles/nginx/tasks/install.yml
    - name: start nginx
        service: name=nginx state=started

main.yml文件格式

    #cat roles/nginx/tasks/main.yml
    - import_tasks: groupadd.yml
           - import_tasks:useradd.yml
    - import_tasks: install.yml
    - import_tasks: restart.yml

調用角色方法: 註意:調用角色的playbook文件必須跟roles文件是同級關系

    playbook格式: 
    cat nginx_roles.yml
     - hosts: websrvs    
       remote_user: root    
       roles:    
    - role: nginx    

ansible基礎四