自动化运维(二十五)Ansible 实战过滤器插件和缓存插件

 Ansible 支持多种类型的插件,这些插件可以帮助你扩展和定制 Ansible 的功能。每种插件类型都有其特定的用途和应用场景。今天我们一起学习 过滤器插件和缓存插件。

一、 过滤器插件(Filter Plugins)

Ansible 过滤器插件(Filter Plugins)是一种强大的工具,用于在 Ansible 模板(Jinja2)中处理数据。它们提供了一种方式来转换或格式化变量和其他数据类型。过滤器可以在变量上应用,以执行字符串操作、数值计算、数据结构转换等。

过滤器插件的作用

过滤器插件在 Ansible 中通常用于:

  • 数据格式化:将数据转换成所需的格式,例如,日期格式化、数字格式化、JSON 序列化等。
  • 数据处理:如列表去重、排序、合并、找出最大值或最小值等。
  • 条件过滤:对数据进行条件筛选,返回符合条件的元素。
  • 字符串处理:执行大小写转换、分割、替换等操作。

如何创建自定义过滤器插件

创建自定义过滤器插件涉及到编写 Python 代码,并将其放在特定的目录中,通常是 filter_plugins/ 目录。Ansible 会在这个目录下查找 Python 文件,并加载里面定义的过滤器。

示例:创建一个简单的加法过滤器

假设我们需要一个过滤器来对两个数进行加法运算。我们将创建一个名为 add_filter.py 的文件,并放置在 filter_plugins/ 目录中。

  1. 创建过滤器插件文件:

    在 filter_plugins/ 目录中创建 add_filter.py

    class FilterModule(object):"""A filter plugin to add two numbers."""def filters(self):return {'add': self.add}def add(self, a, b):return a + b
    

    在这个插件中,我们定义了一个 add 方法,它接受两个参数 a 和 b,返回它们的和。filters 方法必须返回一个字典,其中键是过滤器名(如这里的 add),值是实现该功能的方法。

  2. 在 Ansible Playbook 中使用自定义过滤器:

    创建一个 playbook,使用这个新的过滤器:

    - hosts: localhostgather_facts: notasks:- debug:msg: "The sum of 10 and 20 is {{ 10 | add(20) }}"
    

    这个 playbook 定义了一个任务,使用自定义的 add 过滤器将 10 和 20 相加,并打印结果。

执行 Playbook

运行这个 playbook 时,Ansible 会查找 filter_plugins/ 目录,加载 add_filter.py 文件,并应用 add 过滤器。输出将显示两个数字的和。

二、 缓存插件(Cache Plugins)

Ansible 缓存插件用于临时存储和读取数据,以提高执行效率和减少重复数据获取的开销。通常,缓存用于存储主机事实(facts)和其他运行时数据,这样在多次执行 Ansible playbooks 或 roles 时,可以避免重新收集这些数据。

缓存插件尤其在处理大规模环境时显得格外重要,因为它们可以显著减少网络流量和减少对远端系统的查询压力。Ansible 支持多种类型的缓存插件,如内存、Redis、Memcached、JSON 文件等。

主要功能

  1. 事实缓存:Ansible 可以缓存收集的事实,以便在后续的 playbook 运行中重用。
  2. 减少重复工作:对于重复执行的任务,如周期性的配置检查或监控,缓存可以存储上一次执行的结果,从而提高效率。
  3. 跨 playbook 共享数据:允许在不同的 playbook 运行之间共享和重用数据。

示例:使用Redis缓存插件

假设我们想使用 Redis 作为缓存后端来存储 Ansible 收集的事实。首先,你需要确保你的环境中安装了 Redis 服务器以及必要的 Python 库。

1、配置 Ansible 使用 Redis 缓存插件

修改 ansible.cfg 文件以配置缓存插件和相关参数:

[defaults]
gathering = smart
fact_caching = redis
fact_caching_connection = localhost:6379:0
fact_caching_timeout = 86400  # 缓存超时时间,单位是秒
  • gathering: 设置为 smart,Ansible 会智能地决定何时需要重新收集事实。
  • fact_caching: 指定使用的缓存插件,这里是 redis
  • fact_caching_connection: 指定 Redis 服务器的连接信息。
  • fact_caching_timeout: 设置缓存的过期时间。
2、执行 Playbook

当你运行任何 playbook 时,如果开启了事实收集,Ansible 将自动将收集到的事实存储到 Redis 中,并在后续的 playbook 执行中从缓存中读取,而不是重新收集。

- hosts: alltasks:- debug:var: ansible_facts

这个简单的 playbook 将显示所有缓存的事实,如果事实已经在 Redis 中,它将直接从缓存读取。

注意事项

  • 确保缓存后端(如 Redis)在使用前已正确配置并运行。
  • 缓存的使用应根据实际需求谨慎配置,以避免使用过期或不一致的数据。
  • 在使用缓存时,应定期检查和维护缓存数据的完整性和一致性。

通过合理使用缓存插件,Ansible 可以更高效地执行自动化任务,特别是在大规模和复杂的环境中。

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

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

相关文章

批量记录收支明细,高效记录当天的收支明细并查看每个支出占比,轻松掌握开销

在繁忙的现代生活中,我们时常因为琐碎的财务事务而分心。为了帮助您更好地管理财务,我们推出了这款智能财务助手,让您可以高效记录每天的收支明细,并轻松掌握每个支出的占比。从此告别混乱,让财务管理变得简单明了 第…

gym界面修改

资料:https://blog.csdn.net/weixin_46178278/article/details/135962782 在gym环境中使用mujoco的时候,有一个很难受的地方,界面上没有实时显示动作空间和状态空间状态的地方。 gym自己原始带的环境是用pygame画的图,所以在定义…

【前端】es-drager 图片同比缩放 缩放比 只修改宽 只修改高

【前端】es-drager 图片同比缩放 缩放比 ES Drager 拖拽组件 (vangleer.github.io) 核心代码 //初始宽 let width ref(108)//初始高 let height ref(72)//以下两个变量 用来区分是单独的修改宽 还是高 或者是同比 //缩放开始时的宽 let oldWidth 0 //缩放开始时的高 let o…

JWT重放漏洞如何攻防?你的系统安全吗?

大家好,我是石头~ 在数字化浪潮席卷全球的今天,JSON Web Token(JWT)作为身份验证的利器,已成为众多Web应用的首选方案。 然而,正如硬币有两面,JWT的强大功能背后也隐藏着潜在的安全风险&#xf…

2024mathorcup数学建模D题思路分析-量子计算在矿山设备配置及运营中的建模应用

# 1 赛题 D 题 量子计算在矿山设备配置及运营中的建模应用 随着智能技术的发展,智慧矿山的概念越来越受到重视。越来越多的 设备供应商正在向智慧矿山整体解决方案供应商转型,是否具备提供整体 解决方案的能力,也逐步成为众多矿山设备企业的核…

UVC摄像头在虚拟机Ubuntu16.04使用的正确姿势

前言:在Windows使用UVC摄像头是正常的,但在虚拟机Ubuntu中使用可以识别到, 但是一直没有数据出来,一度怀疑是摄像头不行,后来经过仔细研究,才发现是虚拟机usb设置有点问题。一、虚拟机USB设置USB 3.0,不然没…

【C++类和对象】上篇

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

数据仓库—ETL工具与技术:数据仓库的坚实基石

作为一名长期从事数据仓库领域的专业人士,我深知ETL(Extract, Transform, Load)工具和技术在构建和维护数据仓库中的核心作用。ETL不仅是数据流动的桥梁,更是确保数据质量和支持业务智能决策的关键环节。在这篇文章中,…

字节码文件的组成

字节码文件的组成 字节码文件的组成1 以正确的姿势打开文件2 字节码文件的组成2.1 基本信息2.2 常量池2.3 字段2.4 方法2.5 属性 3 字节码常用工具3.1 javap3.2 jclasslib插件3.3 Arthas 4 字节码常见指令 字节码文件的组成 1 以正确的姿势打开文件 字节码文件中保存了源代码…

Git 解决分支冲突

一、前言 一直习惯于 add commit push 的三步走,偶然间看到了一个评论说在 push 之前还有一个 pull,小小的疑问就埋在了我的心里。于是我就先了解了 pull 的工作原理,就是先拉取代码(fetch)再合并分支(mer…

matlab使用教程(42)—常见的二维图像绘制方法

这个博客用于演示如何在 MATLAB 中创建曲线图、条形图、阶梯图、误差条形图、极坐标图、针状图、散点图。 1.曲线图 plot 函数用来创建 x 和 y 值的简单线图。 x 0:0.05:5; y sin(x.^2); figure plot(x,y) 运行结果: 线图可显示多组 x 和 y 数据。 x 0:0.05:…

git撤销提交

要在Git中撤销最近的一次提交,可以使用以下命令: git reset --soft HEAD^:这将撤销最后一次提交,但保留更改内容在暂存区。 git reset --mixed HEAD^:默认选项,撤销提交和暂存区的更改,不过不删…

旧版本jquery升级新版本后如何处理兼容性问题

前言 最近项目在漏洞扫描过程中发现现在的jquery版本受多个跨站点脚本漏洞影响,需要升级jquery版本。 1、首先下载高版本的jquery,我这里升级的是3.6.0 2、对应的bootstrap版本也要升级,这里升级的是3.3.7 本来以为替换完这两个文件后&#…

STM32H7定时器TIM1-TIM17中断、PWM实现

STM32H7定时器TIM1-TIM17中断、PWM实现 高级定时器硬件框图定时器模式时基输出PWM定时器输入捕获 TIM1-TIM17的中断配置TIM1-TIM17的PWM输出 STM32H7 支持的定时器有点多,要简单的区分下。STM32H7 支持 TIM1-TIM8,TIM12-TIM17 共14 个定时器,…

Traefik不同版本之间的差异?

Traefik 是一款流行的开源反向代理和负载均衡器🔄,它被广泛用于容器化📦和微服务架构🌐中。从其首次发布以来,Traefik 经历了多个版本的更新,每个版本都带来了重要的新特性和改进🛠️。在本文中…

GitHub repository - Watch - Star - Fork - Follow

GitHub repository - Watch - Star - Fork - Follow References 眼睛图标旁边写着 Watch 字样。点击这个按钮就可以 Watch 该仓库,今后该仓库的更新信息会显示在用户的公开活动中。Star 旁边的数字表示给这个仓库添加 Star 的人数。这个数越高,代表该仓库…

【数据结构】习题之链表的回文结构和相交链表

👑个人主页:啊Q闻 🎇收录专栏:《数据结构》 🎉前路漫漫亦灿灿 前言 今日的习题是关于链表的,分别是链表的回文结构和相交链表的判断。 链表的回文结构 题目为:链表的回文结…

华为OD-C卷-找座位[100分]

题目描述 在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至少一 个空位才允许落座。 现在给出一排观众座位分布图,座位中存在已落座的观众,请计算出,在不 移动现有观众座位的情况下,最多还能坐下多少名观众。 输入描述 一个数组,…

sysbench MySQL性能测试

目录 1. QPS&&TPS 1.1 数据库启动到现在的运行时间(秒) 1.2 查询量 1.3 status命令直接显示出QPS 1.4 每秒输出数据库状态(累加) 2. sysbench 测试工具 3. OLTP MySQL测试 3.1 普通参数 3.2 支持的lua脚本 3.3 脚本参数 3.4 测试数据准备 3.5 进行测试 3.…

服务器数据恢复—不同型号服务器RAID5数据恢复策略有何不同?

RAID5作为应用最广泛的raid阵列级别之一,在不同型号服务器中的RAID5出现故障后,处理方法也不同。 RAID5阵列级别是无独立校验磁盘的奇偶校验磁盘阵列,采用数据分块和独立存取技术,能在同一磁盘上并行处理多个访问请求,…