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

运行效果:

相关推荐
傻啦嘿哟6 分钟前
Python正则表达式:用“模式密码“解锁复杂字符串
linux·数据库·mysql
浪裡遊1 小时前
Linux常用指令
linux·运维·服务器·chrome·功能测试
SugarPPig2 小时前
PowerShell 查询及刷新环境变量
服务器
段ヤシ.3 小时前
银河麒麟(内核CentOS8)安装rbenv、ruby2.6.5和rails5.2.6
linux·centos·银河麒麟·rbenv·ruby2.6.5·rails 5.2.6
深夜情感老师4 小时前
centos离线安装ssh
linux·centos·ssh
我的作业错错错4 小时前
搭建私人网站
服务器·阿里云·私人网站
王景程5 小时前
如何测试短信接口
java·服务器·前端
微网兔子6 小时前
伺服器用什么语言开发呢?做什么用什么?
服务器·c++·后端·游戏
夸克App6 小时前
实现营销投放全流程自动化 超级汇川推出信息流智能投放产品“AI智投“
运维·人工智能·自动化
Rainbond云原生6 小时前
83k Star!n8n 让 AI 驱动的工作流自动化触手可及
运维·人工智能·自动化