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.运行