ansible 修改文件变量_基于ansible的批量配置生成

背景

网络运维,我们有很多时间是在准备配置的路上,咱们之前也讲过,从脑海中或者是从自己的宝藏笔记中找出模板,一顿操作猛如虎,Ctrl C+ Ctrl V。这个过程是十分危险的,因为人不是机器,肯定会出错,放纵自己去放空自己去复制粘贴,出的配置,早晚要“湿鞋”。

我们之前讲过用jinja2+python去生成配置,今天我们讲讲用ansible去生成配置,其底层实际也使用的是jinja2。但是借助于playbook和inventory文件(hosts),它可以帮助我们省去一些代码,同时可以将生成的配置结合ansible去实现更复杂的内容,比如推送到设备或者推送到git,比如将准备的配置在下一个ansible的playbook中使用,或者是产生的配置是下一个task的任务等等。

废话不多讲,我们来看看如何用ansible批量生成配置,以及其中的一些技巧。

其中主要涉及到的知识点是template模块的使用以及变量的定义。

我们演示的场景还是最简单的端口配置。看看如何快速生成端口配置。

jinja2模板引擎使用大家可以参考我之前的文章。

最简版:变量+jinja2模板

我们先来一个简单版本的。

简单版本首先要定义一个jinja2的模板文件,jinjia2的文件一般使用j2作为后缀。我们端口配置的j2如下:

{% for intf in  interfaces %}
{{ intf[0] }}
description {{ intf[1]}}
{% endfor %}

其中我们把端口定义为这样的一个数据格式 这个是在playbook中定义的。

interfaces:

这里我们把每个端口定义成了列表,其实也可以定义成dict字典,二者各有利弊,列表写一行,看着舒坦,书写简单。dict的key会让整体可读性更好,这个看大家的取舍。我这里偷个懒。

其中变量interfaces的名字与j2文件中的变量必须同名,这个是ansible的对应模块帮我们去自动将interfaces与j2 render生成配置的,所以一定要同名。

然后我们来定义我们对应的把变量render到模板中的task了。

- 

这个template模块,从上面的playbook来看很简单:

  • src:是本地jinja2模板的路径。

  • dest:这个从官方和网上的一些资料去看,都是remote server的路径。但是,针对网络设备,这是一个本地的路径。

还有一些和Linux文件相关的参数,是否覆盖,访问权限等,默认是覆盖的,我们不是很关注。

dest我们说是remote server的路径,这个其实描述的有点问题。对于host中的设备,如果是服务器,dest是远程服务器的路径,但是针对网络设备,这个dest是ansible主机(或者我们称之为控制器)的本地路径,这个大家要注意一下。

有兴趣大家可以去看看template的源代码,它是根据jinja2模板和变量生成配置,然后利用copy模块把配置复制到远端服务器,如果是网络设备,则会把内容创建在本地(这个是我根据实验获取一个结论,与connection的配置方式无关,在源代码中找这个逻辑找的也很模糊,作为网络运维人员,我们这样简单理解我觉得是没问题的)。

这个阶段的playbook:

---

结果:

c60b045c081fc810a59cf25ebfc3d196.png

升级版:变量文件+jinja2模板

刚才的方式我们生成了配置,但是变量都写在了一个playbook中,当端口比较多的时候,这个playbook就显得非常大,为了看实际运行的内容要拖好长才能看到。

这个时候我们可以简单升级一下,把变量提取到一个指定的yaml文件,然后通过yaml文件描述我们的配置参数。

首先我们简单定义一个要配置的端口的yaml文件。

interfaces.yml:

---

定义好变量,我们把这个文件导入到playbook中.

---

结果:

ae6e7d5467dce31403829250fd1ecc06.png

我们对内置变量vars_files进行了赋值,进而导入了我们的变量文件。我们可以导入多个变量文件。

如此,我们便可以将一个playbook固定下来,以后每次修改变量文件内容批量生成配置文件,且可以重复利用。

这种适合于一些大批量的配置生成。

脑洞大开

延伸拓展:

  • 基于变量及文件配置自动生成,我们可以固化一些常用的应急场景,比如防火墙切换,将每组防火墙切换的变量文件准备好,然后在应急的时候去调用对应的变量文件

  • 开局自动化

  • 日常变更割接的模板管理、配置生成自动化及推送自动化

后续:

  • 基于ansible,可以结合我们之前相关推送模块,Cli的或者是厂商自带的一些copy_config(从本地文件读取写入到设备
  • 通过自己的paramiko与netmiko脚本去推送配置
  • 用我们自己的配置推送工具去推送。一些大厂都会有自研或者购买的配置管理工具可以批量推送配置
  • 手刷(最不推荐)

今天就到这里结束,以上只是一部分演示。我们可以利用ansible与jinja2批量生成配置。

下一次,我们讲讲基于角色的playbook的编写,可以与这个结合,按角色生成不同的配置。这种适用一些固定场景或者是重要变更或者是开局自动化等等

感觉这次划了水。下次分享计划是RESTful API (与这个ansible的交叉着来),这个系列打算拆成3-5次去分享,因为内容其实有点多。

欢迎大家继续关注、点赞、分享、喜欢、收藏、订阅,推荐给你身边的网工!

同名知乎专栏和微信公众号:NetDevOps加油站,欢迎你的加入!

codes:

  • https://gitee.com/feifeiflight/NetDevOpsShare/blob/master/codes/ansible_codes/templates_show.yml

  • https://gitee.com/feifeiflight/NetDevOpsShare/blob/master/codes/ansible_codes/templates_with_var_files_show.yml

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

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

相关文章

Fluid — 云原生环境下的高效“数据物流系统”

简介: 为了解决大数据、AI 等数据密集型应用在云原生计算存储分离场景下,存在的数据访问延时高、联合分析难、多维管理杂等痛点问题,南京大学 PASALab、阿里巴巴、Alluxio 在 2020 年 9 月份联合发起了开源项目 Fluid。Fluid 本质上是一个云原…

普通大学生的 Java 开发能力到什么水平才能进大厂?

对于刚开始接触编程的同学来说,选择一门合适的编程语言非常重要。Java一直以来都是被广泛使用的语言,其服务端开发占比90%,83次在TIOBE排行第一,是很多程序员的首选语言。在发展前景方面,Java的就业范围很广&#xff0…

delphi7 如何判定dbgrid两行重复_教你如何在服装上加入好看的毛线刺绣花边

有时候一件旧衣服我们给它添加一些新的元素,会产生意外惊喜的效果。今天,我们就来学学如何用毛线在衣服上刺绣花边,让衣服变得更加漂亮的方法吧!在本教程中,我们使用了一些零头羊毛线,11号木针和用于刺绣的…

阿里的 RocketMQ 如何让双十一峰值之下 0 故障?

简介: 2020 年双十一交易峰值达到 58.3 W 笔/秒,消息中间件 RocketMQ 继续数年 0 故障丝般顺滑地完美支持了整个集团大促的各类业务平稳。 作者 | 愈安 来源 | 阿里巴巴云原生公众号 2020 年双十一交易峰值达到 58.3 W 笔/秒,消息中间件 Roc…

英特尔携手谷歌云加速最新虚拟机;谷歌云平台下调抽成比例;Hitachi Vantara推出全新云成本优化服务...

NEWS新闻回顾GitLab 将上市随着收入持续增长和亏损扩大,DevOps 宠儿 GitLab 终于申请了首次公开募股 (IPO)。GitLab 一直致力于成为开发人员的一站式商店,与 GitHub(2018 年被微软以 75 亿美元高价收购)和其他 DevOps 公司竞争。在…

eq linux_音乐家和音乐爱好者的开放硬件 | Linux 中国

从 3D 打印乐器到无线播放声音的设备,有很多通过开放硬件项目来奏乐的方法。-- Michael Weinberg这个世界到处都是很棒的开源音乐播放器,但为什么只是将开源用在播放音乐上呢?你还可以使用开源硬件奏乐。本文中描述的所有工具都是经过了开源硬…

“匿名句柄” 是一切皆文件背后功臣……

作者 | 奇伢 来源 | 奇伢云存储匿名 fd 的样子?我们经常在 /proc/${pid}/fd/ 下面能看到 anon_inode : 前缀的句柄,如下:rootubuntu:~/temp# ll /proc/5398/fdlr-x- 1 x x 64 Aug 4 9:9 8 -> anon_inode:inotify lrwx- 1 x x 64 Aug …

Flink集成Iceberg在同程艺龙的实践

简介: 本文由同城艺龙大数据开发工程师张军分享,主要介绍同城艺龙 Flink 集成 Iceberg 的生产实践。 本文由同城艺龙大数据开发工程师张军分享,主要介绍同城艺龙 Flink 集成 Iiceberg 的生产实践。内容包括: 背景及痛点Flink Ice…

阿里巴巴开源容器镜像加速技术

简介: 近日阿里巴巴开源了其云原生容器镜像加速技术,其推出的overlaybd镜像格式,相比于传统的分层tar包文件格式,实现了基于网络的按需读取,从而使得容器可以快速启动。 近日阿里巴巴开源了其云原生容器镜像加速技术&…

Unity重写Inspector简化分组配置文件

Unity重写Inspector简化分组配置文件 重写Inspector创建分组管理配置文件创建修改参数参数对应类工程在我的资源中名为CreateConfig,免费下载 重写Inspector创建分组管理配置文件 创建 修改参数 参数对应类 using UnityEngine;public class GameConfig : Scriptab…

985大学的高材生只会写代码片段,丢人吗?

很多同学在学习编程的时候都会遇到各种各样的难题,比如:没有合适的资料、学习过于碎片化、资料的质量层次不齐、看了很多视频自己动手时却还是不会、接触不到完整项目、无法检测自己的编程水平是不是企业所认可的……最近,小郭和小解同学也遇…

快手基于RocketMQ的在线消息系统建设实践

简介: 快手需要建设一个主要面向在线业务的消息系统作为 Kafka 的补充,低延迟、高并发、高可用、高可靠的分布式消息中间件 RocketMQ 正是我们所需的。 作者:黄理 黄理,10多年软件开发和架构经验,热衷于代码和性能优…

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台

简介: 本文将对 RocketMQ-Exporter 的设计实现做一个简单的介绍,读者可通过本文了解到 RocketMQ-Exporter 的实现过程,以及通过 RocketMQ-Exporter 来搭建自己的 RocketMQ 监控系统。RocketMQ 在线可交互教程现已登录知行动手实验室&#xff…

c语言结构体函数平面向量加法公式,插值 拟合 符号变量与符号表达式 微积分 解方程 向量运算...

7.1.1 分段线性插值所谓分段线性插值就是通过插值点用折线段连接起来逼近原曲线,这也是计算机绘制图形的基本原理。实现分段线性插值不需编制函数程序,MATLAB自身提供了内部函数interp1其主要用法如下:interp1(x,y,xi) 一维插值◆ yiinterp1(…

Redis 很屌,不懂使用规范就糟蹋了

作者 | 码哥 来源 | 码哥字节❝这可能是最中肯的 Redis 使用规范了一网友昨天和我说,公司凌晨 12 点之后,网站用户量暴增,出现了一个技术故障,用户无法下单,当时老大火冒三丈!经过查找发现 Redis 报 C…

python统计字符在文件中出现的次数_一文搞定统计字符串中某字符出现的频次

下面是统计字符串中某字符出现的次数的方法 方法1: 这个方法相当简单,零基础自学编程,代码写成这样能满足需求,但它逐个逐个计数,比较笨拙。rlt {} for i in content: if i in rlt.keys(): rlt[i] 1 else: rlt[i] 1…

深度 | 数据仓库分层存储技术揭秘

简介: 作者: 沄浩、士远 一 、背景 据IDC发布的《数据时代2025》报告显示,全球每年产生的数据将从2018年的33ZB增长到2025年的175ZB,平均每天约产生491EB数据。随着数据量的不断增长,数据存储成本成为企业IT预算的重…

android tab 切换动画,Android之ViewPager+TabLayout组合实现导航条切换效果(微信和QQ底部多标签切换)...

前言之前在另外一篇中用Fragment和button实现了点击切换Fragment的效果,比较简陋。这次改用ViewPagerTabLayout 实现联动的效果。实现效果ViewPager 多个页面滑动TabLayout 和 ViewPager绑定,实现Fragment和标签绑定TabLayout的自定义标签以及选中颜色改…

5G 和云原生时代的技术下半场,视频化是最大最新的确定性

简介: 随着 5G/ 芯片 / 区块链等等新技术的不断成熟、云计算的普及和云原生时代带来的诸多便捷,开发者和架构师们眼前的挑战也不再只是 0-1 的建设问题,技术如何更多地带来业务价值成为了一个值得讨论的话题。阿里巴巴集团研究员,…

linux unzip命令不存在_15个常用基础命令Linux(很多人不知道!)

Linux 是码农最常用的的OS,很多操作都是命令行,所以很有必要熟练和理解其中一些重要的命令。这里会介绍一些。这里讲的所有都基于bash,mac也可以使用。!!这件事发生了几次? 输入并运行一条长命令后,您发现您忘记在开头添加sudo。 …