ansible的role目录结构及用法

avatar
作者
猴君
阅读量: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:运行脚本的入口;该目录不会自动生成,位置取决于个人或团队

为了组织和管理起见,可以考虑以下几点建议:

  1. 项目根目录: 将 playbook.yml文件放在项目根目录中,这样可以使整个 Ansible 部署更为结构化和清晰。
  2. playbooks 目录: 如果你有多个 playbook 文件或者希望将它们统一放置,可以在项目根目录下创建一个 playbooks 或类似的目录,并将 playbook 文件放在其中。
  3. 版本控制: 如果你使用版本控制系统(如 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  #脚本运行入口 
  1. 编写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> 
  1. 获取httpd的配置文件
yum install -y httpd && cp /etc/httpd/conf/httpd.conf roles/httpd/templates/httpd.conf.j2 
  1. 编写任务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 
  1. 编写处理程序vim roles/httpd/handlers/main.yml
--- # 表示衔接上文 # httpd的处理程序文件  # 重新加载httpd服务 - name: restart httpd   service: name=httpd state=reloaded 
  1. 修改配置文件vim roles/httpd/templates/httpd.conf.j2,把端口号设置为变量
45 # 46 #Listen 12.34.56.78:80 47 Listen {{httpd_port}} 48 49 # 
  1. 编写变量
--- # 表示衔接上文 # httpd的变量文件  # httpd服务使用的端口号 httpd_port: 80 
  1. 编写入口文件
# 指定主机为host1 - hosts: host1  # 应用httpd角色来管理该主机   roles:     - httpd 
  1. 检查脚本(必须在roles目录内,否则报错)
# 进入roles目录 cd roles/  # 运行指令检查./playbooks/httpd.yml是否可用 ansible-playbook ./playbooks/httpd.yml --syntax-check  # 结果如下则没问题 playbook: ./playbooks/httpd.yml 
  1. 运行脚本(必须在roles目录内,否则报错)
# 进入roles目录 cd roles/  ansible-playbook ./playbooks/httpd.yml 
  1. 把端口号改一下看是否成功(可跳过)
vim roles/httpd/vars/main.yml 
--- # 表示衔接上文 # httpd的变量文件  # httpd服务使用的端口号 httpd_port: 8088 
# 进入roles目录 cd roles/  ansible-playbook ./playbooks/httpd.yml 

运行效果:

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!