1、ROLES 角色mysql
一、目錄層級結構nginx
二、角色調用web
三、層級結構展現sql
示例1:利用ansible角色安裝nginxvim
示例2:變量調用centos
示例3:在playbook調用角色方法:傳遞變量給角色緩存
示例4:條件測試角色調用bash
示例5:角色安裝服務器
示例6:角色變量調整memcached內存大小app
對於以上全部的方式有個弊端就是沒法實現複用假設在同時部署Web、db、ha 時或不一樣服務器組合不一樣的應用就須要寫多個yml文件。很難實現靈活的調用。。
roles 用於層次性、結構化地組織playbook。roles 可以根據層次型結構自動裝載變量文件、tasks以及handlers等。要使用roles只須要在playbook中使用include指令便可。簡單來說,roles就是經過分別將變量(vars)、文件(file)、任務(tasks)、模塊(modules)及處理器(handlers)放置於單獨的目錄中,並能夠便捷地include它們的一種機制。角色通常用於基於主機構建服務的場景中,但也能夠是用於構建守護進程等場景中。
一、目錄層級結構
roles每一個角色中,以特定的層級目錄進行組織
Mysql/ 角色
Files/ #存放有copy或script模塊等調用的文件;’
Tepmlates/ #template模塊查找所須要模板文件目錄;
Tasks/ #定義任務;至少應該包含一個名爲main.yml的文件;其餘的文件須要在此文件中經過
include進行包含。
Handlers/ #定義觸發器;至少應該包含一個名爲main.yml的文件;其餘的文件須要在此文件中經過
include進行包含。
Vars/ #定義變量;至少應該包含一個名爲main.yml的文件;其餘的文件須要在此文件中經過
include進行包含。
Meta/ #定義變量;至少應該包含一個名爲main.yml的文件;定義當前角色的特殊設定及其依賴
關係;其餘的文件須要在此文件中經過include進行包含。
Default/ #設定默認變量時使用此目錄中的main.yml文件。
二、角色調用
[root@centos7_1 yaml]# vim roles.yml --- Hosts:web Remote_user:root Roles: - mysql - memchached - nginx
三、層級結構展現
示例1:利用ansible角色安裝nginx
[root@centos7_1 ~]# mkdir/etc/ansible/roles/nginx/{files,tasks,templates,handlers,vars, \ default,mata} –pv #建立固定目錄結構 [root@centos7_1 ~]# tree /etc/ansible/roles/nginx/ /etc/ansible/roles/nginx/ ├── default ├── files ├── handlers ├── mata ├── tasks ├── templates └── vars [root@centos7_1 ~]# cd/etc/ansible/roles/nginx/ [root@centos7_1 nginx]# vimtasks/main.yml #建立任務 - name: install nginx package yum: name=nginx state=present - name: install conf file template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf #此處源文件可不寫絕對路徑,系統自查找。 - name: start nginx service: name=nginx state=started [root@centos7_1 ~]# cp/apps/work/files/nginx.conf.c6.j2 ../templates/nginx.conf.j2 #將配置文件拷貝至templates目錄內。 [root@centos7_1 ~]# cd /apps/yaml/ [root@centos7_1 yaml]# cat roles.yml #建立調用文件 --- - hosts: web remote_user: root roles: - nginx [root@centos7_1 yaml]#ansible-playbook roles.yml #利用ansible-playbook執行。
示例2:變量調用
利用定義變量使遠程主機的nginx服務運行用戶變動爲daemon [root@centos7_1 ~]# vim/etc/ansible/roles/nginx/vars/main.yml username: daemon [root@centos7_1 ~]# vim/etc/ansible/roles/nginx/templates/nginx.conf.j2 user {{ username }}; # 將此處原有用戶修改成變量 [root@centos7_1 ~]# cd/apps/yaml/ [root@centos7_1 yaml]#ansible-playbook roles.yml [root@centos7_1 yaml]#ansible-playbook -e"username=adm" roles.yml #也能夠直接利用命令行傳遞變量參數給劇本文件。
示例3:在playbook調用角色方法:傳遞變量給角色
[root@centos7_1 yaml]vim roles.yml --- - hosts:web remote_user:root roles: - {role: nigix, username: nginx } #在調用nginx角色是使用變量username:nginx時服務運行用戶爲nginx 鍵role:用於指定角色名稱;後續的鍵值對用戶傳遞變量給角色 [root@centos7_1yaml]# ansible-playbook roles.yml
示例4:條件測試角色調用
還能夠基於條件測試實現角色調用; [root@centos7_1yaml]vim roles.yml --- - hosts:web remote_user: root roles: {role: nigix, username: nginx ,when: 「ansible_distribution_major_version ==’7’」} #基於條件測試調用變量賦予nginx。 [root@centos7_1 yaml]#ansible-playbook -t instconf roles.yml
示例5:角色安裝
[root@centos7_1 ~]# mkdir/etc/ansible/roles/memcached/tasks -pv [root@centos7_1 ~]# vim /etc/ansible/roles/memcached/tasks/main.yml - name: install package yum: name=memcached state=present - name: start memecached service: name=memcached state=started [root@centos7_1 ~]# cd/apps/yaml/ [root@centos7_1 yaml]# cat mem.yml --- - hosts: web remote_user: root roles: - { role: nginx,when:ansible_distribution_version == '7' } #系統爲centos7時調用執行nginx - { role: memcached,when: ansible_hostname =='memcached' } #系統用戶名爲memcached的主機調用執行角色memcached。
示例6:角色變量調整memcached內存大小
利用變量使遠程主機上的Memcahed的緩存大小佔用系統內存大小的三分之一。 [root@centos7_1 ~]# cd/etc/ansible/roles/memcached/ [root@centos7_1 memcached]#ls handlers/ tasks/ templates/ [root@centos7_1 memcached]#mkdir templates [root@centos7_1memcached]# scp 172.16.254.216:/etc/sysconfig/memcached \ ./templates//memcached.j2 [root@centos7_1 memcached]#vim templates/memcached.j2 PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="{{ansible_memtotal_mb//3 }}" #變量設置內存的3分之一 此變量爲遠程主機的總內存//3 指除3取商 便爲遠程主機的三分之一 [root@centos7_1 memcached]#mkdir handlers/ [root@centos7_1 memcached]#vim handlers/main.yml - name: restart memcached service: name=memcached state=restarted [root@centos7_1 memcached]#cd /apps/yaml/ root@centos7_1 yaml]#ansible-playbook mem.yml #執行劇本