目录
- 目录结构介绍
- 案例
目录结构介绍
可以通可以通过使用 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>//声明一片空间的名字叫canvasvar 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个0for(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 httpdyum: name=httpd state=latest# 复制index.html文件到Web服务器的默认页面目录
- name: copy index.htmlcopy: src=index.html dest=/var/www/html/index.html# 复制httpd.conf.j2模板文件到HTTPD配置文件目录,并在完成后通知重启httpd服务
- name: copy httpd.conftemplate: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.confnotify: restart httpd# 启动httpd服务并设置开机自启动
- name: runnung httpdservice: name=httpd state=started enabled=yes
- 编写处理程序
vim roles/httpd/handlers/main.yml
--- # 表示衔接上文
# httpd的处理程序文件# 重新加载httpd服务
- name: restart httpdservice: 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 #
- 编写变量
--- # 表示衔接上文
# httpd的变量文件# httpd服务使用的端口号
httpd_port: 80
- 编写入口文件
# 指定主机为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
运行效果: