1 概述
角色(roles):若是咱們使用playbook寫成一個文件,這個文件會很大,可是不方便組織,咱們能夠分組,把playbook根據功能,如handler,tasks等分門別類的放在在各自的子目錄下,造成一個集合,就是角色,建議把角色放在固定的目錄下,目錄能夠ansible的配置文件中的roles_path來定義。html
參考: http://www.ansible.com.cn/docs/playbooks_roles.html web
https://blog.51cto.com/ghbsunny/2047084redis
2 配置介紹sql
以層級結構組織Playbook的核心元素,成爲roles。vim
核心元素包括如下幾點:tomcat
Hosts:主機socket
Tasks:任務列表ide
Variables:變量
Templates:包含了模板語法的文本文件;
Handlers:由特定條件觸發的任務;
在roles目錄下,分別建立不一樣的目錄,每一個目錄就是不一樣的角色,roles目錄下是角色的集合:
如roles/建立以下的目錄
mysql/
httpd/
nginx/
memcached/
roles模塊的路徑能夠在配置文件/etc/ansible/ansible.cfg裏roles_path定義.
每一個角色,以特定的層級目錄結構進行組織,例子以下:
/roles/mysql/
- files/ :存放由copy或script模塊等調用的文件;
- templates/:template模塊查找所須要模板文件的目錄;
- tasks/:至少應該包含一個名爲main.yml的文件;其它的文件須要在此文件中經過include進行包含;
- handlers/:至少應該包含一個名爲main.yml的文件;其它的文件須要在此文件中經過include進行包含;
- vars/:至少應該包含一個名爲main.yml的文件;其它的文件須要在此文件中經過include進行包含;
- meta/:至少應該包含一個名爲main.yml的文件,定義當前角色的特殊設定及其依賴關係;其它的文件須要在此文件中經過include進行包含;注意,角色和角色之間有依賴關係,如安裝NT,先裝nginx後裝tomcat,通常不需定義,執行咱們本身定義好安裝順序便可
- default/:設定默認變量時使用此目錄中的main.yml文件;
nginx/
├── files 靜態文件
├── tasks 任務列表
│ ├── copyfile.yml
│ ├── installnginx.yml
│ ├── main.yml 入口文件
│ └── start.yml
├── templates 模板文件
│ └── nginx.conf
└── vars 變量
└── handlers 被觸發的動做
3 playbook調用角色
playbook調用角色有三個方法:
方法1:
方法2:傳遞變量給角色,調用角色時,注意依賴關係,能夠本身先考慮好前後順序
方法3:基於條件測試實現角色調用;
roles:
- { role: nginx, when: "ansible_distribution_major_version == '7' " }
查找順序
roles目錄,對應的文件夾
tasks:先找tasks目錄裏面的main.yml文件,看到import_tasks來導入別的yml文件,這個是必須的
templates: 找這個目錄裏面的模板文件,在tasks裏面是能夠用相對路徑來寫
vars:先找main.yml文件,若是找到就找變量替換
hanlers:先找main.yml文件,若是找到,則在tasks裏面經過notify來觸發
files: 放的是靜態文件
相互調用
經過import_tasks 來相互調用,roles/role/tasks/taskfile.yml
怎麼使用
跟roles同級目錄下,寫nginx。yml文件
- hosts: web
roles:
- nginx
4 例子
建立roles文件夾
mkdir roles
建立nginx, mysql, redis, uwsgi 四個角色
進入一個角色 cd nginx,
建立目錄 mkdir -v {tasks,files,templates,handlers,vars}
nginx/
├──files 靜態文件
├──tasks 任務列表
│ ├──copyfile.yml
│ ├──installnginx.yml
│ ├──main.yml 入口文件
│ └──start.yml
├──templates模板文件
│ └──nginx.conf
└──vars 變量
└──handlers 被觸發的動做
進入tasks cd tasks
1.建立安裝nginx任務 vim installnginx.yaml
-name:installnginx
yum:name=nginx
2.建立拷貝文件任務 vim copyfile.yaml
-name:copyfile
template:src=nginx.confdest=/etc/nginx/nginx.conf
3.建立啓動任務 vim startnginx.yaml
-name:starnginx
service:name=nginxstate=started
4.建立入口文件 vim main.yaml
-import_tasks:installnginx.yaml
-import_tasks:copyfile.yaml
-import_tasks:startnginx.yaml
5.建立觸發handlers文件 (每次修改配置文件後觸發 須要notify ) cd handler
建立入口文件 vim main.yaml
-name:restart
service:name=niginstate=restarted
5.1去tasks目錄中的 拷貝文件任務中 添加notify cd nginx/tasks/ vim copyfile.yaml
-name:copyfile
template:src=nginx.confdest=/etc/nginx/nginx.conf
tags:copyfile
notify:restart
5.2把本機上的nginx配置文件copy到templates中
個人nginx在/opt/nginx1-12/conf/nginx.conf
cp/opt/nginx1-12/conf/nginx.confnginx.conf
6.配置nginx配置文件, (修改核心數,可選) vim nginx.conf
worker_processes{{ansible_processor_vcpus}};
7.跟roles同級的目錄中建立 主role文件 vim nginx.yaml
-hosts:all
roles:
-nginx
8.檢查一下
ansible-playbook--syntax-checknginx.yaml
9.運行