Ansible自動化部署之ROLES

1、ROLES 角色mysql

   一、目錄層級結構nginx

   二、角色調用web

   三、層級結構展現sql

    示例1:利用ansible角色安裝nginxvim

    示例2:變量調用centos

    示例3:在playbook調用角色方法:傳遞變量給角色緩存

    示例4:條件測試角色調用bash

    示例5:角色安裝服務器

    示例6:角色變量調整memcached內存大小app


1、ROLES 角色

         對於以上全部的方式有個弊端就是沒法實現複用假設在同時部署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


 三、層級結構展現

         wKioL1iNvDigfDsaAAAfQx5IoMw285.png

 

示例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  #執行劇本
相關文章
相關標籤/搜索