阅读量:0
目录
目录结构介绍
可以通可以通过使用 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 #
- 编写变量
--- # 表示衔接上文 # 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
运行效果: