自学内容网 自学内容网

ansible的role目录结构及用法

目录结构介绍

可以通可以通过使用 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

运行效果:


原文地址:https://blog.csdn.net/thetender/article/details/140513828

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!