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>//声明一片空间的名字叫canvasvar 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个0for(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 httpdyum: name=httpd state=latest# 复制index.html文件到Web服务器的默认页面目录
- name: copy index.htmlcopy: src=index.html dest=/var/www/html/index.html# 复制httpd.conf.j2模板文件到HTTPD配置文件目录,并在完成后通知重启httpd服务
- name: copy httpd.conftemplate: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.confnotify: restart httpd# 启动httpd服务并设置开机自启动
- name: runnung httpdservice: name=httpd state=started enabled=yes
  1. 编写处理程序vim roles/httpd/handlers/main.yml
--- # 表示衔接上文
# httpd的处理程序文件# 重新加载httpd服务
- name: restart httpdservice: 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

运行效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/50499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 函数的参数形式

Python 函数的参数形式 Python 函数的参数有多种形式&#xff0c;每种形式在不同的场景下使用。我们主要介绍以下几种&#xff1a; 位置参数关键字参数默认参数可变位置参数&#xff08;*args&#xff09;可变关键字参数&#xff08;**kwargs&#xff09; 1. 位置参数 位置…

python题解

宽度与对齐 输出455、-123、987654&#xff0c;宽度为5&#xff0c;分别左对齐和右对齐 格式 输入格式&#xff1a; 无 输出格式&#xff1a; 输出为整型&#xff0c;空格分隔。每个数的输出占一行 样例 1 输入&#xff1a; 无 复制 输出&#xff1a; 455 455 -123 -123 98…

Vue的SSR和预渲染:提升首屏加载速度与SEO效果

引言 在现代Web应用开发中,首屏加载速度和搜索引擎优化(SEO)是衡量应用性能的重要指标。Vue.js 作为流行的前端框架,提供了服务器端渲染(SSR)和预渲染(prerendering)两种技术来提升这些指标。本文将深入探讨如何使用 Vue 的 SSR 和预渲染技术,提供详细的代码示例和最…

FFmpeg源码:av_probe_input_format3函数分析

一、av_probe_input_format3函数的声明 av_probe_input_format3函数声明在FFmpeg源码&#xff08;本文演示用的FFmpeg源码版本为5.0.3&#xff09;的头文件libavformat/avformat.h中&#xff1a; /*** Guess the file format.** param is_opened Whether the file is already…

Go语言的数据结构

数据结构 数组 支持多维数组&#xff0c;属于值类型&#xff0c;支持range遍历 例子&#xff1a;随机生成长度为10整数数组 package main import ("fmt""math/rand" ) // 赋值 随机获取100以内的整数 func RandomArrays() {var array [10]int //声明var…

【MySQL进阶篇】锁:全局锁、表级锁以及行级锁

一、锁的概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须要解决的一个问题&am…

C语言11 结构体、共用体、枚举和重定义

目录 结构体&#xff08;Struct&#xff09; 定义结构体 声明和初始化结构体变量 访问结构体成员 嵌套结构体 指向结构体的指针 共用体&#xff08;Union&#xff09; 定义共用体 声明和使用共用体 重定义&#xff08;Typedef&#xff09; 定义类型别名 使用类型别…

Person Re-Identification(Re-ID)的分类

行人重识别&#xff08;Person Re-Identification, Re-ID&#xff09;是计算机视觉和深度学习中的一个重要任务&#xff0c;旨在通过图像或视频中的行人外观信息来识别和追踪同一个人在不同摄像头视角下的出现。根据任务的不同&#xff0c;行人重识别可以分为以下几类&#xff…

室内消防逃生通道占用检测AI算法:科技筑防,守护生命通道

随着城市化进程的加快&#xff0c;高层建筑和大型公共场所的数量急剧增加&#xff0c;消防安全问题愈发凸显。其中&#xff0c;室内消防逃生通道的畅通性直接关系到火灾发生时人员的安全疏散。然而&#xff0c;由于各种原因&#xff0c;如杂物堆放、车辆停放等&#xff0c;消防…

nacos 2.3.2 若依使用mysql

1&#xff09;从官网下载 nacos&#xff0c;如果下载慢&#xff0c;关注从本人发布上传下载也可以 2&#xff09;修改配置文件 【config】-【application.properties】 ### Deprecated configuration property, it is recommended to use spring.sql.init.platform replaced.…

SpringBoot实现定时任务-@Scheduled

在Java编程中&#xff0c;Scheduled 注解是 Spring Framework 提供的一个用于定时任务的注解。 Scheduled可以将一个方法配置为定时执行的任务。 以下是一些基本用法&#xff1a; 1.固定速度 fixedRate指两次任务的开始时间间隔。所以存在第二次任务开始时&#xff0c;第一…

LeetCode 2844.生成特殊数字的最少操作(哈希表 + 贪心)

给你一个下标从 0 开始的字符串 num &#xff0c;表示一个非负整数。 在一次操作中&#xff0c;您可以选择 num 的任意一位数字并将其删除。请注意&#xff0c;如果你删除 num 中的所有数字&#xff0c;则 num 变为 0。 返回最少需要多少次操作可以使 num 变成特殊数字。 如…

mysql各个参数调整

innodb_lock_wait_timeout 事务锁释放时间

前端知识--前端访问后端技术Ajax及框架Axios

一、异步数据请求技术----Ajax Ajax是前端访问后端的技术&#xff0c;为异步请求&#xff08;不刷新页面&#xff0c;请求数据&#xff0c;只更新局部数据&#xff09;。 例如&#xff1a;在京东网站中搜索电脑&#xff0c;就会出现一些联想搜索&#xff0c;但此时页面并没有…

【技术支持】canvas转换为图片或PDF保存电脑

注意&#xff1a;有些网站可能由于canvas跨域污染问题&#xff0c;无法使用toBlob&#xff0c;所以无法转换 开发者工具中&#xff0c;选中需要转换的canvas元素&#xff08;使其可以使用$0语法&#xff09; 控制台输入如下代码 $0.toBlob(function (blob) {var link document…

Window下CLion实现本机通过socket通信-C++

1.引言-什么是socket socket即套接字&#xff0c;用于描述地址和端口&#xff0c;是一个通信链的句柄。应用程序通过socket向网络发出请求或者回应。 sockets(套接字)编程有三种&#xff0c;流式套接字&#xff08;SOCK_STREAM&#xff09;&#xff0c;数据报套接字&#xff…

go语言开发Prometheus Exporter(DM数据库)

一、介绍 源码步骤基于dameng_exporter源码讲解&#xff0c;看完本篇文章可以直接进行二次开发。 dameng exporter的开源地址&#xff1a;https://github.com/gy297879328/dameng_exporter&#xff08;可直接对接prometheusgrafana 提供表盘&#xff09; 开发一个exporter 其…

Linux中的三类读写函数

文件IO和标准IO的区别 遵循标准&#xff1a; 文件IO遵循POSIX标准&#xff0c;主要在类UNIX环境下使用。标准IO遵循ANSI标准&#xff0c;具有更好的可移植性&#xff0c;可以在不同的操作系统上重新编译后运行。可移植性&#xff1a; 文件IO的可移植性相对较差&#xff0c;因为…

基于大模型零代码1小时完成国标数据分级分类近义词库构建及思考

1. 任务背景及困难分析 因项目要求&#xff0c;需要对国家标准国民经济行业分类-GB/T 4754-2017【1】进行近义词库的构建&#xff0c;时间非常紧&#xff0c;只给了很短时间进行处理&#xff0c;目标是构建一份中等粒度的行业近义词库。 搁在以前&#xff0c;可能需要点时…

<设计模式> 单例模式

单例模式 模式介绍&#xff1a;保证一个类仅有一个实例&#xff0c;并提供一个全局访问点来获取这个唯一的实例。主要解决&#xff1a;一个全局使用的类频繁地创建与销毁。关键代码&#xff1a;构造函数是私有的。 应用场景 数据库连接池&#xff1a;数据库连接是一种宝贵的…