一、role的介绍
1、Roles称为角色,本质上是为简化playbook配置文件而产生的一种特殊的方法。
2、简单来说,roles就是将原本在一个yaml中的文件进行规则化分散,封装到不同的目录下,从而简化playbook的yaml配置文件大小。从其实现方法上来看,类似于软件开发上的代码封装。
3、其格式下的目录结构是特定的,必须包含tasks、variables、handlers、templates、files目录;使用时只需要遵循其文件结构配置自己的定制化操作。
二、目录说明
bash
defaults/main.yml:设置默认变量的地方;默认变量的优先级在所有的变量中是最低的,用于定义一些需要被覆盖的变量;
files:Ansible中unarchive、copy等模块会自动来这里找文件,从而我们不必写绝对路径,只需写文件名
handlers/main.yml:存放tasks中的notify指定的内容
meta/main.yml:定义role依赖关系的文件
tasks/main.yml:存放playbook的目录,其中main.yml是主入口文件,在main.yml中导入其他yml文件,要采用import_tasks关键字,include将要弃用了
templates:存放模板文件;template模块会将模板文件中的变量替换为实际值,然后覆盖到客户机指定路径上
vars/main.yml:定义role中需要使用到的变量
三、nginx安装示例
bash
[root@192 role]# tree nginx/
nginx/
├── files
│ └── inex.html
├── handles
│ └── main.yml
├── install-nginx.yml
├── tasks
│ ├── conf.yml
│ ├── data.yml
│ ├── install.yml
│ ├── main.yml
│ ├── service.yml
│ └── user.yml
├── templates
│ └── nginx.conf.j2
└── vars
└── main.yml
bash
[root@192 role]# cat nginx/files/inex.html
<h1>welcome to beijing!</h1>
bash
[root@192 role]# cat nginx/tasks/conf.yml
- name: config file
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: restart #触发notify和handlers两个角色
bash
[root@192 role]# cat nginx/tasks/data.yml
- name: install package
yum: name=nginx
bash
[root@192 role]# cat nginx/tasks/install.yml
- name: yum 安装nginx
yum: name=nginx
bash
[root@192 role]# cat nginx/tasks/main.yml
- include: install.yml
- include: conf.yml
- include: service.yml
- include: data.yml
bash
[root@192 role]# cat nginx/tasks/service.yml
- name: service
service: name=nginx state=started
bash
[root@192 role]# cat nginx/tasks/user.yml
- name: 创建用户
vars_file:
- /home/admin/ansible/roles/nginx/vars/main.yml
user: name={{ username }} system=yes group={{ groupname }}
bash
[root@192 role]# cat nginx/templates/nginx.conf.j2
user {{username}};
worker_processes 2;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
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;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 8080;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
bash
[root@192 role]# cat nginx/vars/main.yml
username: daemon
bash
[root@192 role]# cat nginx/install-nginx.yml
- hosts: harbor
remote_user: root
roles:
- role: nginx
当nginx启动成功后增加handles中文件
bash
[root@192 role]# cat nginx/handles/main.yml
- name: restart
service: name=nginx state=restarted