一、Roles
角色思想:
- 模块化,可重复调用
创建角色的注意事项:
文件夹:目录树
Porject_Name
roles #角色集合
mysql/
nginx/
tasks/ #任务模块
main.yml #角色入口
templates/ #模板文件
vars/ #变量文件
handlers/ #触发任务
httpd/
memcache/
nginx_roles.yml #调用角色,需要和roles文件夹同级
!> 以上就是简单的角色文件分布情况
二、分析nginx角色部署的过程
- 创建组
- 创建用户
- 安装Nginx
- 拷贝模板文件
- 启动服务
以上五个步骤就是实现Nginx的安装到启动
三、编写角色
首先创建目录:默认的角色存放在/etc/ansible/roles
~]# mkdir /etc/ansible/roles/my_project
~]# cd /etc/ansible/roles/my_project
~]# mdkir -pv roles/{nginx,mysql,httpd} #创建多个角色,但是我们只用gninx
~]# cd roles/nginx
~]# mkdir tasks templates handlear vars
1. 编写yml文件
~]# cd tasks
创建组任务: group.yml
- name: Create Group
group: name=nginx gid=80
创建用户任务: user.yml
- name: Create User
user: name=nginx uid=80 system=yes shell=/sbin/nologin group=nginx
安装nginx任务: install.yml
- name: Install Nginx
yum: name=nginx
拷贝模板文件任务: template.yml
- name: Copy Config
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
启动nginx任务: start.yml
- name: Start Nginx
service: name=nginx state=started enabled=yes
基本的功能都实现了,注意以上文件都在/etc/ansible/roles/my_project/roles/nginx/tasks/
下
2. 编写角色入口文件
文件名为main.yml
,位置:/etc/ansible/roles/my_project/roles/nginx/tasks/
(和所有任务在同级目录下)
- import_tasks: group.yml
- import_tasks: user.yml
- import_tasks: install.yml
- import_tasks: template.yml
- import_tasks: start.yml
#这里就定义了角色任务的执行顺序
当前目录下的文件如下:
3. 准备模板文件
文件名为nignx.conf.j2
,存放位置/etc/ansible/roles/my_project/roles/nginx/templates/
user nginx;
worker_processes {{ ansible_processor_vcpus+2 }};
#jinja2 表示进程数为cpu核心个数 +2
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm;
}
}
当前的目录树如下:
忽略restart.yml和乱码
4. 调用角色
在roles同级目录编写: nginx_roles.yml
;内容如下
---
- hosts: websrvs
remote_user: root
roles:
nginx
这样一个完整nginx安装角色就完成了
三、测试角色
~]# ansible-playbook -C nginx_roles.yml
<center>你许了我一米的阳光</center>
<center>却给了我一世的沧桑</center>
<center>那个她,你还记得吗</center>
<center>
</center>