自动化运维ansible(role)

一、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
相关推荐
两点王爷2 小时前
docker 运行自定义化的服务-后端
运维·docker·容器
邪恶的贝利亚2 小时前
FFMEPG常见命令查询
linux·运维·网络·ffmpeg
搜搜秀3 小时前
find指令中使用正则表达式
linux·运维·服务器·正则表达式·bash
七七powerful4 小时前
使用opentelemetry 可观测监控springboot应用的指标、链路实践,使用zipkin展示链路追踪数据,使用grafana展示指标
运维
新加坡内哥谈技术4 小时前
OpenAI即将上线新一代重磅选手——GPT-4.1
人工智能·深度学习·语言模型·自然语言处理·自动化
Archie_IT4 小时前
修图自由!自建IOPaint服务器,手机平板随时随地远程调用在线P图
运维·服务器·前端·git·深度学习·npm·conda
行思理4 小时前
centos crontab 设置定时任务访问链接
linux·运维·centos
再玩一会儿看代码5 小时前
[特殊字符] 深入理解 WSL2:在 Windows 上运行 Linux 的极致方案
linux·运维·windows·经验分享·笔记·学习方法
我是小木鱼6 小时前
浅析Centos7安装Oracle12数据库
linux·运维·服务器·数据库
Pluto & Ethereal7 小时前
新手宝塔部署thinkphp一步到位
运维·服务器·阿里云·php·腾讯云