目录结构介绍
可以通可以通过使用 ansible-galaxy
命令再当前目录自动生成 role 的基本目录结构。
myrole
为文件名(角色名)
ansible-galaxy init myrole
如果没有安装Ansible Galaxy,你可以使用以下命令安装:
ansible-galaxy collection install community.general
标准目录结构:
可以根据需求自定义目录结构
myrole/
├── defaults/
│ └── main.yml
├── files/
├── handlers/
│ └── main.yml
├── meta/
│ └── main.yml
├── tasks/
│ └── main.yml
├── templates/
├── tests/
│ ├── inventory
│ └── test.yml
├── vars/
│ └── main.yml
└── README.md
- defaults/: 包含 role 的默认变量,存放在
main.yml
文件中。 - files/: 可选,存放需要在目标主机上复制的文件。
- handlers/: 包含处理器(handlers),这些处理器会在任务执行完毕后运行,通常在
main.yml
中定义。 - meta/: 包含与 role 相关的元数据,如作者、依赖等,存放在
main.yml
中。 - tasks/: 包含所有要执行的任务,通常在
main.yml
中定义。 - templates/: 可选,存放用于在目标主机上生成文件的 Jinja2 模板。
- tests/: 包含用于测试 role 的文件,如测试用的 inventory 和测试任务
test.yml
。 - vars/: 包含其他变量文件,通常在
main.yml
中定义。 - README.md: 包含 role 的说明文档,描述了 role 的用途、配置选项等信息。
脚本运行文件:
myansibleproject/
├── myrole/
└── playbooks/
└── playbook.yml
playbooks/playbook.yml:运行脚本的入口;该目录不会自动生成,位置取决于个人或团队
为了组织和管理起见,可以考虑以下几点建议:
- 项目根目录: 将
playbook.yml
文件放在项目根目录中,这样可以使整个 Ansible 部署更为结构化和清晰。- playbooks 目录: 如果你有多个 playbook 文件或者希望将它们统一放置,可以在项目根目录下创建一个
playbooks
或类似的目录,并将 playbook 文件放在其中。- 版本控制: 如果你使用版本控制系统(如 Git),建议将 playbook 文件一起管理,这样可以轻松跟踪和回滚配置更改。
案例
案例简单,主要是帮助理解
需求:在host1服务器上安装httpd服务,修改配置文件时重启httpd服务
案例目录结构:
roles
├── httpd
│ ├── files
│ │ └── index.html #用于修改httpd的欢迎页
│ ├── handlers
│ │ └── main.yml
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ │ └── httpd.conf.j2 #用于修改httpd的配置文件
│ └── vars
│ └── main.yml
└── playbooks
└── httpd.yml #脚本运行入口
- 编写
index.html
,只做演示简单编写一下(可以理解为项目文件比如换成项目压缩包,进行远程解压)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>流星雨</title>
<meta name="keywords" content="关键词,关键字">
<meta name="description" content="描述信息">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes" />
<style>
body{
margin: 0;
overflow: hidden;
}
</style>
</head>
<body>
<!-- <canvas>画布 画板 -->
<canvas width="400" height="400" style="background: #000000;" id="canvas"></canvas>
<!-- <script> 画笔 -->
<script>
//声明一片空间的名字叫canvas
var canvas = document.getElementById("canvas");
//获取画板2D 渲染上下文的方法
var ctx =canvas.getContext("2d");
//让画板的屏幕等于屏幕大小
//1、获取屏幕对象
var s = window.screen;
//2、获取屏幕的宽和高
var w =s.width;
var h = s.height;
//3、设置画板大小
canvas.width = w;
canvas.height = h;
//设置文字大小
var fontSize = 14;
//计算一行有多少个文字取整数向下取数
var clos = Math.floor(w/fontSize);
//创建数组把clos个0(y坐标存储起来)
var drops = [];
//修改要展示的文字或字符,可以是任意字符但必须是字符串
var str = "欢迎";
//往数组里添加clos个0
for(var i = 0;i<clos;i++){
drops.push(0);
}
//绘制文字
function drawString(){
//给矩形设置填充色
ctx.fillStyle="rgba(0,0,0,0.05)"
//绘制一个矩形
ctx.fillRect(0,0,w,h);
//添加文字样式
ctx.font = "600 "+fontSize+"px 微软雅黑";
//设置文字颜色
ctx.fillStyle = "#00ff00";
for(var i = 0;i<clos;i++) {
//x坐标
var x = i * fontSize;
//y坐标
var y = drops[i]*fontSize;
//绘制文字
ctx.fillText(str[Math.floor(Math.random()*str.length)],x,y);
if(y>h&&Math.random()>0.99){
drops[i] = 0;
}
drops[i]++;
}
}
//定义定时器,每个30毫秒执行一次
setInterval(drawString,60);
</script>
</body>
</html>
- 获取httpd的配置文件
yum install -y httpd && cp /etc/httpd/conf/httpd.conf roles/httpd/templates/httpd.conf.j2
- 编写任务
vim roles/httpd/tasks/main.yml
--- # 表示衔接上文
# HTTPD角色的任务文件
# 安装最新版本的httpd
- name: install httpd
yum: name=httpd state=latest
# 复制index.html文件到Web服务器的默认页面目录
- name: copy index.html
copy: src=index.html dest=/var/www/html/index.html
# 复制httpd.conf.j2模板文件到HTTPD配置文件目录,并在完成后通知重启httpd服务
- name: copy httpd.conf
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify: restart httpd
# 启动httpd服务并设置开机自启动
- name: runnung httpd
service: name=httpd state=started enabled=yes
- 编写处理程序
vim roles/httpd/handlers/main.yml
--- # 表示衔接上文
# httpd的处理程序文件
# 重新加载httpd服务
- name: restart httpd
service: name=httpd state=reloaded
- 修改配置文件
vim roles/httpd/templates/httpd.conf.j2
,把端口号设置为变量
45 #
46 #Listen 12.34.56.78:80
47 Listen {{httpd_port}}
48
49 #
- 编写变量
vim roles/httpd/vars/main.yml
--- # 表示衔接上文
# httpd的变量文件
# httpd服务使用的端口号
httpd_port: 80
- 编写入口文件
vim roles/playbooks/httpd.yml
# 指定主机为host1
- hosts: host1
# 应用httpd角色来管理该主机
roles:
- httpd
- 检查脚本(必须在roles目录内,否则报错)
# 进入roles目录
cd roles/
# 运行指令检查./playbooks/httpd.yml是否可用
ansible-playbook ./playbooks/httpd.yml --syntax-check
# 结果如下则没问题
playbook: ./playbooks/httpd.yml
- 运行脚本(必须在roles目录内,否则报错)
# 进入roles目录
cd roles/
ansible-playbook ./playbooks/httpd.yml
- 把端口号改一下看是否成功(可跳过)
vim roles/httpd/vars/main.yml
--- # 表示衔接上文
# httpd的变量文件
# httpd服务使用的端口号
httpd_port: 8088
# 进入roles目录
cd roles/
ansible-playbook ./playbooks/httpd.yml
运行效果: