ansible的role用法

目录

目录结构介绍

可以通可以通过使用 ansible-galaxy 命令再当前目录自动生成 role 的基本目录结构。
myrole为文件名(角色名)

bash 复制代码
ansible-galaxy init myrole

如果没有安装Ansible Galaxy,你可以使用以下命令安装:

bash 复制代码
ansible-galaxy collection install community.general

标准目录结构:

可以根据需求自定义目录结构

bash 复制代码
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 的用途、配置选项等信息。

脚本运行文件:

bash 复制代码
myansibleproject/
├── myrole/
└── playbooks/
    └── playbook.yml

playbooks/playbook.yml:运行脚本的入口;该目录不会自动生成,位置取决于个人或团队

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

  1. 项目根目录 : 将 playbook.yml文件放在项目根目录中,这样可以使整个 Ansible 部署更为结构化和清晰。
  2. playbooks 目录 : 如果你有多个 playbook 文件或者希望将它们统一放置,可以在项目根目录下创建一个 playbooks 或类似的目录,并将 playbook 文件放在其中。
  3. 版本控制: 如果你使用版本控制系统(如 Git),建议将 playbook 文件一起管理,这样可以轻松跟踪和回滚配置更改。

案例

案例简单,主要是帮助理解

需求:在host1服务器上安装httpd服务,修改配置文件时重启httpd服务

案例目录结构:

bash 复制代码
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,只做演示简单编写一下(可以理解为项目文件比如换成项目压缩包,进行远程解压)
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的配置文件
bash 复制代码
yum install -y httpd && cp /etc/httpd/conf/httpd.conf roles/httpd/templates/httpd.conf.j2
  1. 编写任务vim roles/httpd/tasks/main.yml
bash 复制代码
---  # 表示衔接上文
# 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
bash 复制代码
--- # 表示衔接上文
# httpd的处理程序文件

# 重新加载httpd服务
- name: restart httpd
  service: name=httpd state=reloaded
  1. 修改配置文件vim roles/httpd/templates/httpd.conf.j2,把端口号设置为变量
bash 复制代码
45 #
46 #Listen 12.34.56.78:80
47 Listen {{httpd_port}}
48
49 #
  1. 编写变量
bash 复制代码
--- # 表示衔接上文
# httpd的变量文件

# httpd服务使用的端口号
httpd_port: 80
  1. 编写入口文件
bash 复制代码
# 指定主机为host1
- hosts: host1

# 应用httpd角色来管理该主机
  roles:
    - httpd
  1. 检查脚本(必须在roles目录内,否则报错)
bash 复制代码
# 进入roles目录
cd roles/

# 运行指令检查./playbooks/httpd.yml是否可用
ansible-playbook ./playbooks/httpd.yml --syntax-check

# 结果如下则没问题
playbook: ./playbooks/httpd.yml
  1. 运行脚本(必须在roles目录内,否则报错)
bash 复制代码
# 进入roles目录
cd roles/

ansible-playbook ./playbooks/httpd.yml
  1. 把端口号改一下看是否成功(可跳过)
bash 复制代码
vim roles/httpd/vars/main.yml
bash 复制代码
--- # 表示衔接上文
# httpd的变量文件

# httpd服务使用的端口号
httpd_port: 8088
bash 复制代码
# 进入roles目录
cd roles/

ansible-playbook ./playbooks/httpd.yml

运行效果:

相关推荐
yaoxin5211236 分钟前
第三十二章 UDP 客户端 服务器通信
服务器·网络协议·udp
筱小虾米2 小时前
解决SSL VPN客户端一直提示无法连接服务器的问题
运维·服务器
dntktop4 小时前
内嵌编辑器+AI助手,Wave Terminal打造终端新体验
运维
Peter_chq5 小时前
【计算机网络】多路转接之select
linux·c语言·开发语言·网络·c++·后端·select
太阳风暴6 小时前
Ubuntu-修改左Alt和Win键位置关系
linux·ubuntu·修改键盘·键盘映射
kaiyuanheshang6 小时前
docker 中的entrypoint和cmd指令
运维·docker·容器·cmd·entrypoint
wanhengwangluo7 小时前
裸金属服务器能够帮助企业解决哪些问题?
运维·服务器
Python私教7 小时前
除了 Docker,还有哪些类似的容器技术?
运维·docker·容器
titxixYY7 小时前
SElinux
linux·运维·服务器