Roles角色管理
角色(roles)是ansible自1.2版本开始引入的新特性,用于层次性,结构化地组织playbook。
roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单的说,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。角色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中。
一般情况下将roles写在 /etc/ansible/roles 中,也可以写在其他任意位置(写在其他位置要自己手动建立一个roles文件夹)
这里来编译安装 nginx ,部署一个web 页面,同时对roles角色的各个功能进行解析
创建nginx的角色目录
[root@web01 roles]# mkdir -p /etc/ansible/roles/nginx/{files,tasks,handlers,vars,templates,meta,default}
目录结构:
[root@web01 roles]# tree
.
└── nginx
├── default
├── files
├── handlers
├── meta
├── tasks
├── templates
└── vars
8 directories, 0 files
目录解析:
nginx:存放nginx服务的yml文件
default:此目录至少应该有一个名为main.yml的文件,用于设定默认变量;
files:存储由copy或者script等模块调用的文件或者脚本;
handlers:此目录中至少应该有一个名为main.yml的文件,用于定义各个handler;其他文件需要由main.yml进行包含调用;
meta:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定以及依赖关系,其他文件需要由main.yml进行包含调用;
tasks:此目录中至少应该有一个名为main.yml的文件,用于定义各个task;其他文件需要由main.yml进行包含调用;
templates:存储由templates模块调用的模板文件;
vars:此目录至少应该有一个名为main,yml的文件,用于定义各个variable;其他的文件需要由main.yml进行包含调用;
整个角色的一个流程:
定义任务配置文件 --> 定义jinja2 模板,生成配置文件用 --> 定义变量 --> 定义触发(通知已定义在配置文件中) --> 定义nginx 的yml 文件 -->
检查yml 语法 --> 执行nginx.yml 文件 --> 查看服务启动状态
提前准备工作:传包
[root@web01 roles]# ls nginx/files/
nginx-1.24.0.tar.gz 李星云.jpg
定义任务配置文件:
[root@web01 roles]# cat nginx/tasks/main.yml
- name: copy nginx package
copy:
src: files/nginx-1.24.0.tar.gz
dest: /tmp/
- name: tar
unarchive:
src: /tmp/nginx-1.24.0.tar.gz
dest: /usr/local/
remote_src: yes
- name: install 依赖
yum:
name: "{{ item }}"
state: present
loop: "{{ install_package }}"
- name: Compile and install
shell: |
cd /usr/local/nginx-1.24.0
./configure --prefix=/usr/local/nginx
make && make install
- name: copy image
copy:
src: files/李星云.jpg
dest: /usr/local/nginx/html/
- name: changes web pages
template: src=templates/web.conf.j2 dest=/usr/local/nginx/html/index.html
notify: restart
- name: start nginx
shell: |
cd /usr/local/nginx/sbin/
./nginx
定义jinjia2模板:
这里这个模板是一个html 文件,就是简单的web 页面
想达到的效果就是,把nginx 服务的html 目录下的页面替换成这个模板
前面说过jinjia2模板可以是支持多种数据类型,这里直接编辑一个html页面,去替换掉nginx的web页面
[root@web01 roles]# cat nginx/templates/web.conf.j2
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>画江湖之不良人 - 李星云</title>
<style>
body {
margin: 0;
padding: 0;
background-image: url('./李星云.jpg');
background-size: cover;
background-repeat: no-repeat;
background-attachment: fixed;
color: white;
}
font-size: 30px;
<body>
<a href="./luocailian" target="_blank">学习目录</a>
<br/>
<a href="https://blog.csdn.net/LCL_18?spm=1000.2115.3001.5343" target="_blank">欢迎来到我的博客</a>
<div id="luo">
<h1>画江湖之不良人 - 李星云</h1>
<p>李星云,身世神秘,身负奇学。</p>
<p>身世:李星云是唐昭宗李晔的第十子,唐哀帝李祚的胞弟。朱温篡位后,李晔将李星云托付给心腹大臣李焕,李焕带着李星云隐姓埋名,拜在阳叔子门下学艺。</p>
<p>成长经历:李星云在成长过程中结识了师妹陆林轩和好友张子凡,三人一起闯荡江湖。在江湖中,李星云逐渐揭开了自己的身世之谜,并肩负起了光复唐室的使命。</p>
<p>性格特点:李星云性格开朗、幽默风趣,十分宠爱自己的师妹陆林轩。他口才出众,常常用机智的语言逗得大家捧腹大笑。他为人正直,对朋友、对伴侣、对不良人、对天下苍生都十分有责任心。
</p>
<p>武功技能:李星云的武功技能包括天罡诀、华阳针法、青莲剑歌、龙泉剑诀、易容术、气经等。</p>
position: relative;
left: 50px;
margin-top: 20px;
color: lightblue;
top:100px;
}
#two {
font-size: 30px;
position: relative;
left: 50px;
margin-top: 20px;
color: lightblue;
top:100px;
}
</style>
</head>
<p>武器装备:李星云的武器装备包括长剑、龙泉剑、华阳针、唐刀等。</p>
<p>李星云的背景故事充满了传奇色彩,他的成长经历和性格特点也深受观众喜爱</p>
</div>
</body>
</html>
h1 {
text-align: center;
margin-bottom: 200px;
font-size: 48px;
text-shadow: 2px 2px 4px black;
float: none;
}
p {
text-align: center;
font-size: 16px;
text-shadow: 2px 2px 4px black;
}
a {
定义变量配置文件:
[root@web01 roles]# cat nginx/vars/main.yml
install_package:
- gcc
- gcc-c++
- pcre
- pcre-devel
- zlib
- zlib-devel
- make
定义触发器文件:
root@web01 roles]# cat nginx/handlers/main.yml
- name: restart
shell:
cd /usr/local/nginx/bin
./nginx -s reload
定义nginx yml文件
[root@web01 roles]# cat nginx/nginx.yml
---
- hosts: web02
remote_user: root
roles:
- nginx
检查语法,执行命令
[root@web01 roles]# ansible-playbook --syntax-check nginx/nginx.yml
playbook: nginx/nginx.yml
最后的目录结构:
.
└── nginx
├── default
├── files
│ ├── nginx-1.24.0.tar.gz
│└── 李星云.jpg
├── handlers
│ └── main.yml
├── meta
├── nginx.yml
├── tasks
│ └── main.yml
├── templates
│└── web.conf.j2
└── vars
└── main.yml
8 directories, 7 files
[root@web01 roles]# tree
[root@web01 roles]# ls nginx/files/
nginx-1.24.0.tar.gz 李星云.jpg
检验结果:
这里注意记得关闭服务所在主机的防火墙
通过浏览器检验:
可以正常访问页面,成功