[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中缺失的数字三、旋转数组的最小数字四、二维数组中的查找一、在排序数组中查找数字 题目传送门 法一:暴力解 直接遍历然后计数 法二:二分法求边界 看到关键字排序数组、有序数组,一定要想到二分…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...