[Ansible系列]ansible roles
目录
一. Roles简介
二. Roles基本构成
三. Role使用
3.1 playbook中引用roles
3.2 pre_tasks 和 post_tasks
3.3 role的依赖
四. Ansible Galaxy
一. Roles简介
在Ansible中,role是将playbook分割为多个文件的主要机制。它大大简化了复杂playbook的编写, 同时还使得它们非常易于复用。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单的说,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。
二. Roles基本构成
[root@clinet ansible_1]# tree .
.
├── group_vars
├── host_vars
├── inventory
├── man.yml
└── roles└── new_roles├── defaults│ └── main.yml├── files├── handlers│ └── main.yml├── meta│ └── main.yml├── README.md├── tasks│ └── main.yml├── templates├── tests│ ├── inventory│ └── test.yml└── vars└── main.yml
[root@clinet ansible_1]#
Roles各个目录的作用:
1. group_vars:定义主机组变量,在group_vars目录中创建一个文件,文件的文件名称要与inventory清单中的组名称保持一致。
2. host_vars:定义主机变量,在host_vars目录中创建文件,文件的名称要与inventory清单中的主机名称保持一致,如果是ip地址,则创建相同ip地址的文件即可。
3. inventory:定义主机和主机组
4. main.yml:用于执行roles的playbook,该名称自定义,执行方式为ansible-playbook xx.yml
5. roles:存放自定义的roles文件和目录,该目录下new_roles表示一个工作角色,可以存在多个工作角色,每个工作角色目录中必须有上述结构中的文件和目录。
5.1 files:用于存放copy或script等模块调用的文件和脚本,也用于存放一些非模板文件的文件,如https证书等。
5.2 tempaltes:用于存放角色相关的Jinja2模板文件,当使用角色相关的模板时,如未明确指定模 板路径,则默认使用此目录中的模板。
5.3 tasks:角色所要执行的所有任务文件都存放于此,包含一个主文件main.yml,可以在主文件中 通过include的方式引入其他任务文件。
5.4 vars:用于定义此角色用到的变量,包含一个主文件main.yml,可以在主文件中 通过include的方式引入其他任务文件。
5.5 meta:用于存储角色的元数据信息,这些元数据用于描述角色的相关属性,包括作者,角色的 主要作用,角色的依赖关系等。默认这些信息会写入到当前目录下的main.yml文件中(可不写)。
5.6 defaults:除了vars目录,defaults目录也用于定义此角色用到的变量,与vars不同的是, defaults中定义的变量的优先级最低。(实际工作中我们经常将变更比较频繁的变量定义在该文件中)包含一个主文件main.yml,可以在主文件中 通过include的方式引入其他任务文件。
5.7 handlers:用于定义角色中需要调用 的handlers,包含一个主配置文件main.yml,可通过 include引入其他的handlers文件。
(tests目录可以不要)
创建role的步骤如下:
1. 创建以roles命名的目录
2. 在roles目录中分别创建角色名称命名的目录,如websrvs等
3. 在每个角色命名的目录中分别创建files、handlers、meta、tasks、teamplates和vars目录,用 不到的目录可以创建为空目录,也可以不创建。
4. 在playbook文件中,调用各角色
需要说明的是,以上目录并不都是必须的,如果你的roles当中并不需要用到某一个目录,也可 以不用创建,比如我们将所有的变量都放到defaults中,则可以不需要vars目录,如果未用到模 板文件,则不需要templates目录。(建议就当都是必要的,因为后面我们在通过ansible-galaxy init来创建roles的目录就是齐全的。)
三. Role使用
以部署nginx做负载均衡,httpd做后台web为例:
roles目录结构如下:
[root@clinet ansible_1]# tree .
.
├── ansible.cfg
├── group_vars
├── host_vars
├── inventory
├── man.yml
└── roles└── new_roles├── defaults│ └── main.yml├── files│ └── xhz.txt├── handlers│ └── main.yml├── meta│ └── main.yml├── README.md├── tasks│ └── main.yml├── templates│ ├── index.html.j2│ └── nginx.conf.j2└── vars└── main.yml
[root@clinet ansible_1]#
文件配置内容如下:
[root@clinet ansible_1]# cat inventory
[proxy]
192.168.194.132[webserver]
192.168.194.130
192.168.194.131
[root@clinet ansible_1]#
[root@clinet ansible_1]# cat man.yml
- hosts: proxy:webservergather_facts: yespre_tasks:- name: fireword.serverservice:name: firewalldstate: stoppedenabled: nopost_tasks:- name: message infodebug:msg: 'this playbook finished'roles:- new_roles
[root@clinet ansible_1]#
[root@clinet ansible_1]# cat roles/new_roles/defaults/main.yml
listen_port: 80
[root@clinet ansible_1]#
[root@clinet ansible_1]# cat roles/new_roles/files/xhz.txt
192.168.194.128
[root@clinet ansible_1]# cat roles/new_roles/handlers/main.yml
- name: restart nginxservice:name: nginxstate: restarted- name: restart httpdservice:name: httpdstate: restarted
[root@clinet ansible_1]# cat roles/new_roles/tasks/main.yml
- name: install & configure ngxin blockblock:- name: install nginxpackage:name: nginxstate: present- name: configure nginx.conftemplate:src: nginx.conf.j2dest: /etc/nginx/nginx.confbackup: yesnotify: restart nginx- name: start ngixnservice:name: nginxstate: startedenabled: yeswhen: ansible_ens33.ipv4.address in groups['proxy']- name: install & configure httpd blockblock:- name: install httpdpackage:name: httpdstate: present- name: confgure http.conftemplate:src: index.html.j2dest: /var/www/html/index.htmlbackup: yesnotify: restart httpd- name: start httpdservice:name: httpdstate: startedenabled: yeswhen: ansible_ens33.ipv4.address in groups['webserver']- name: copy filecopy:src: xhz.txtdest: /tmp/backup: yes
[root@clinet ansible_1]# cat roles/new_roles/vars/main.yml
user_name: nginx
[root@clinet ansible_1]#
[root@clinet ansible_1]#
3.1 playbook中引用roles
创建好roles之后,需要有playbook来进行引用roles,上述中的引用playbook就是install_role.yml
[root@clinet ansible_1]# cat install_role.yml
- hosts: proxy:webservergather_facts: yesroles:- new_roles
[root@clinet ansible_1]#
[root@clinet ansible_1]#
下面也是一个带入变量的示例:
[root@clinet ansible_1]# cat install_role.yml
- hosts: proxy:webservergather_facts: yesroles:- role: new_rolesvars:dir1: '/xhz123'dir2: '/flf456'
[root@clinet ansible_1]#
[root@clinet ansible_1]#
也可以通过如下方法引用时带入变量:
[root@clinet ansible_1]# cat install_role.yml
- hosts: proxy:webservergather_facts: yesroles:- {role: new_roles, dir1: '/xhz123',dir2: '/flf456'}
[root@clinet ansible_1]#
[root@clinet ansible_1]#
还可以在引用时使用条件语句:
[root@clinet ansible_1]# cat install_role.yml
- hosts: proxy:webservergather_facts: yesroles:- {role: new_roles, when: "ansible_os_family == 'xhz123'"}
[root@clinet ansible_1]#
[root@clinet ansible_1]#
3.2 pre_tasks 和 post_tasks
如果在执行一个role时,需要在其前或其后依然要执行某些任务,我们可以使用 pre_tasks 及 post_tasks 来声明。 pre_tasks 是在 role 之前执行,而 post_tasks 则在role之后执行。
[root@clinet ansible_1]# cat install_role.yml
- hosts: proxy:webservergather_facts: yespre_tasks:- name: fireword.serverservice:name: firewalldstate: stoppedenabled: nopost_tasks:- name: message infodebug:msg: 'this playbook finished'roles:- {role: new_roles, when: "ansible_os_family == 'xhz123'"}
[root@clinet ansible_1]#
3.3 role的依赖
如果当前role在执行前需要依赖另一个role,我们可以在roles的meta目录中的main.yml中定义role 的依赖关系。
示例1:
[root@clinet ansible_1]# cat roles/new_roles/meta/main.yml
dependencies:‐ { role: common, some_parameter: 3 }‐ { role: apache, port: 80 }‐ { role: postgres, dbname: blarg, other_parameter: 12 }
示例2:
[root@clinet ansible_1]# cat roles/new_roles/meta/main.yml
dependencies:‐ {role: ntp, ntp_server=ntp.ubuntu.com}‐ {role: web}‐ {role: memcached}
四. Ansible Galaxy
ansible-galaxy是一个工具,我们可以利用它快速的创建一个标准的roles目录结构,还可以通过它在 https://galaxy.ansible.com上下载别人写好的roles,直接拿来用。
通过ansible-galaxy初始化一个roles的目录结构,方法如下:
ansible‐galaxy init new_role
安装别人写好的roles:
ansible‐galaxy install ‐p /etc/ansible/roles bennojoy.mysql
-p:指定路径
默认从galaxy官网下载,官网地址:Ansible Galaxy
列出已安装的roles:
ansible‐galaxy list
查看已安装的roles信息:
ansible‐galaxy info bennojoy.mysql
卸载roles:
ansible‐galaxy remove bennojoy.mysql
相关文章:
[Ansible系列]ansible roles
目录 一. Roles简介 二. Roles基本构成 三. Role使用 3.1 playbook中引用roles 3.2 pre_tasks 和 post_tasks 3.3 role的依赖 四. Ansible Galaxy 一. Roles简介 在Ansible中,role是将playbook分割为多个文件的主要机制。它大大简化了复杂playbook…...

冯诺依曼体系结构与操作系统的理解
✅<1>主页:我的代码爱吃辣 📃<2>知识讲解:操作系统 💬<3>前言:今天来介绍一下冯诺依曼体系结构,和操作系统的理解。 目录 1.冯诺依曼体系结构 冯诺依曼体系的工作原理: 为…...
API接口签名验证
文章目录一、使用背景二、实现方案三、具体流程四、优化五、代码实现六、后续优化一、使用背景 过去对于接口的验证我一般都是直接在登录时为用户发放token,用户在随后的操作中携带了token则允许请求。 但是这样的验证方式存在有一定的问题,如果token被…...

Keettle (pdi-ce) 整库多表迁移(避坑)
使用开源免费 Keettle 工具 1.下载与安装 官网地址:下载 下载9.3.0以上的,6.1、7.1我都尝试过,6.1导致很多莫名其妙问题,7.1数据库可以连接和预览,迁移的时候就会出现事务读问题,最后解决这个问题后&…...

搭建私人《我的世界》服务器,使用Cpolar内网穿透更简单
文章目录1.前言2.本地服务器搭建2.1 设置环境变量2.2 进行《我的世界》服务器端设置2.3 测试和使用3.本地MC服务器的内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置3.3.测试和使用4.结语1.前言 要说去年游戏圈的重磅大瓜,想必网易和暴雪的分家必能上榜。虽然两家大…...

map和set的使用
文章目录关联式容器树形结构的关联式容器setinsert增减erase删除multiset修改mappair<key,value>insertoperator[] 的引入insert和operator[]的区别multimap小结map的使用统计最喜欢吃的前几种水果前K个高频单词,返回单词的频率由高到低,频率相同时࿰…...
常用正则表达式大全
链接...

注意,摸鱼程序员常用的9个小技巧,早点下班不秃头
9个养生小技巧,祝大家不秃头嗨害大家好鸭! 我是小熊猫~毕竟摸鱼一时爽,一直摸一直爽嘛~一、整理字符串输入二、迭代器切片(Slice)三、跳过可迭代对象的开头四、只包含关键字参数的函数 (kwargs)五、创建支持「with」语…...

【Linux】文件时间-ACM
文章目录文件时间-acmAccessChangeModify文件时间-acm 我们可以使用stat 文件名的方式查看对应的文件的时间信息 Access 表示文件最近一次被访问的时间 文件的访问 实际也就是文件的读取 实际操作中,文件的Access时间可能没有变化,这是因为在新的Linux内核中,Access时间不…...

[架构之路-124]-《软考-系统架构设计师》-操作系统-3-操作系统原理 - IO设备、微内核、嵌入式系统
第11章 操作系统第5节 设备管理/文件管理:IO5.1 文件管理5.2 IO设备管理(内存与IO设备之间)数据传输控制是指如何在内存和IO硬件设备之间传输数据,即:设备何时空闲?设备何时完成数据的传输?SPOO…...

【竞赛/TPU】算能TPU编程竞赛总结
如果觉得我的分享有一定帮助,欢迎关注我的微信公众号 “码农的科研笔记”,了解更多我的算法和代码学习总结记录。或者点击链接扫码关注【竞赛/TPU】算能TPU编程竞赛总结 1 基础知识 1.1【Ubuntu】 Ubuntu操作系统中有很多不同的文件夹,每个…...

Substrate 基础教程(Tutorials) -- 模拟网络 添加可信节点
三、模拟网络 本教程基本介绍了如何使用一个私有验证器(validators)的授权集合来启动私有区块链网络。 Substrate节点模板使用授权共识模型(authority consensus model),该模型将块生产限制为授权帐户的旋转列表(rotating list)。授权帐户(…...
SAP 设置无物料号的费用采购
现在还是以外购电来说一下ERP中费用采购单的使用步骤: (1).Tcode:OMSF定义物料组D1,如下图。 (2).到配置路径IMG Path:物料管理->采购->帐户分配(或直接SE16:V_T163K)定义一科目分配类别,默认的K就是费用采购科目分配类型,如果可能可以复制一个,如下图,注意下…...

k8s ConfigMap 中 subPath 字段和 items 字段
Kubernetes中什么是subPath 有时,在单个 Pod 中共享卷以供多方使用是很有用的。volumeMounts.subPath 属性可用于指定所引用的卷内的子路径,而不是其根路径。 这句话理解了,基本就懂subPath怎么用了,比如我们要替换nginx.cnf, 挂…...

UML建模
主要记录UML中的相关知识,包括类、对象、接口、方法、用例、活动、状态、组件和部署图,详细介绍类之间关系与类图的绘制 文章目录一、UML介绍二、类图类之间的关系依赖关系继承关系实现关系关联关系组合关系聚合关系正文内容: 一、UML介绍 …...
JavaScript常见面试题(更新中)
介绍js的基本数据类型 js一共有五种数据类型 分别是undefined null boolean number string 还有ES6中新增的symbol和ES10的bigInt symbol代表创建后独一无二的不可变的数据类型,他的出现我认为是为了解决可能出现的全局变量冲突的问题 BigInt是一种数字类型的数据 …...

TCP/IP协议
✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录TCP/IP协议应用层协议自定义应用层协议DNS传输层协议端口号UDP协议UDP协议端格式TCP协议TCP协议段格式TCP工作机制确认应答(安…...

Python使用异步线程池实现异步TCP服务器交互
背景: 实现客户端与服务端交互,由于效率原因,要发送与接收异步,提高效率。 需要多线程,本文用线程池管理。 common代码: import pickle import struct import timedef send_msg(conn, data):time.sleep(…...

matplotlib常用操作
文章目录1 matplotlib绘图1.1 绘图步骤2 matplotlib基本元素2.1 matplotlib 画布2.2 设置坐标轴长度和范围2.3 设置图形的线型和颜色2.4 设置图形刻度范围、刻度标签和坐标轴标签等2.4.1 设置刻度范围2.4.2 设置坐标轴刻度2.5 文本标签图例3 matplotlib的ax对象绘图4 绘制子图5…...

二分算法题
文章目录一、在排序数组中查找数字二、0~n-1中缺失的数字三、旋转数组的最小数字四、二维数组中的查找一、在排序数组中查找数字 题目传送门 法一:暴力解 直接遍历然后计数 法二:二分法求边界 看到关键字排序数组、有序数组,一定要想到二分…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...

Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...