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:
---
结果:
升级版:变量文件+jinja2模板
刚才的方式我们生成了配置,但是变量都写在了一个playbook中,当端口比较多的时候,这个playbook就显得非常大,为了看实际运行的内容要拖好长才能看到。
这个时候我们可以简单升级一下,把变量提取到一个指定的yaml文件,然后通过yaml文件描述我们的配置参数。
首先我们简单定义一个要配置的端口的yaml文件。
interfaces.yml:
---
定义好变量,我们把这个文件导入到playbook中.
---
结果:
我们对内置变量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
ansible 修改文件变量_基于ansible的批量配置生成相关推荐
- ansible 修改文件变量_ansible学习心得
inventory常用参数说明 ansible_ssh_host: 将要连接的远程主机名与你想要设定的主机别名不同,可以通过此变量设置 ansible_ssh_port: ssh端口号,如果不是默认的 ...
- ansible 修改文件变量_Ansible自动化从零到入门
我们知道现在自动化工具中,最简单.易于上手,而且最流行的当属Ansible莫属了.和Chef.Puppet等Ruby工具甚至同时Python系的Saltstack等CS架构的自动化工具相比虽然执行性能 ...
- ansible 修改文件变量_Ansible Playbook中的变量与引用
Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. Ansible自动化运维 前言 前面有说到使用playbook来搞一些复杂的功能, ...
- 安卓上传文件时修改文件名称_使用mmv命令批量修改文件名称
在 Linux 中使用 mv 命令可以重命名或者移动文件及目录,但是它不支持一次重命名多个文件.本文介绍mmv的使用方式,使用通配符模式移动/复制/追加/链接多个文件 环境 Centos7.7 安装m ...
- dockerfile 修改文件权限_网易技术实践|Docker文件系统实战
在本文中,我们来实战构建一个Docker镜像,然后实例化容器,在Docker的生命周期中详细分析一下Docker的文件存储情况和DockerFile优化策略. 在开始实战之前,我们先介绍一个概念,联合 ...
- 中修改环境变量_嵌入式 Linux下永久生效环境变量bashrc
作者:skdkjxy 原文:http://blog.sina.com.cn/s/blog_8795b0970101f1f9.html .bashrc文件 在linux系统普通用户目录(cd /home ...
- bat修改文件内容_批量获取文件名,这几招太高效了!
每周末整理好重点报告库内容后,风弦都会发一篇推文,文章中为大家列出本周收录报告的清单. 有朋友就很好奇,我是怎么获取这么多文件的文件名的,复制粘贴么?当然,不是!重点报告库每周收录100+最新报告,复 ...
- java生成iso9660工具_基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.0.0版)...
TableGo_20210212 v7.0.0 正式版发布,此次版本更新如下: 1.新增对DB2数据库的支持 2.新增按字段生成文件,支持把字段.JSON.XML数据转换成任何代码 3.新增大量新的自 ...
- python批量图像处理_基于python代码批量处理图片resize
出差做PPT,要放一些图片上去,原图太大必须resize,十几张图片懒得一一处理了,最近正好在学python,最好的学习方式就是使用,于是写了一个批量处理图片resize的代码,在写的过程中,熟悉了p ...
最新文章
- 信科c语言实验程序修改题_豆瓣评分 9.3,史上最好的 C 语言著作,竟然翻车了.........
- html中投影效果图,利用CSS3(box shadow)制作边框投影
- notepad++取消语法检测
- android 开机启动服务。
- 自制vue组件通信插件:教你如何用mixin写插件
- Reuse library debug in Chrome - phase1 init phase
- mysql数据库(10):数据 备份
- 简单的学习一下node吧——还在学习中~~~
- mrp手机qq2008下载-MRP格式的手机QQ2008软件介绍及如何正确安装MRPQQ2008挂Q版
- 代码审查codereview工具
- 最小二乘拟合曲线证明+正则方程
- 云计算是什么?新手学习云计算的学习路线
- My interest is the rules/ways to implement, go and insist with interest!!!
- C#WinForm判断界面上多个TextBox控件的值是否为空
- 基于FPGA的UART全双工数据控制器
- 灵动微 MM32 多路ADC-DMA配置
- hss网元 java,EPC网络中网元HSS的英文全称是()。
- Cmake在VS下设置MT
- 【一 zedboard】PS端实现打印hello world
- 汉仪尚巍手书_汉仪尚巍手书字体下载|
热门文章
- 22岁何同学自制硬核AirDesk!苹果都做不来的超大充电桌,稚晖君点赞
- 妙到巅峰的8个简洁数学证明(文科生都能看懂),隐隐触摸到一丝只属于神的智慧气息……...
- 施一公:优秀博士如何养成
- 谁能救得了中兴?下一个是华为吗?
- php 去除标签内样式,PHP去除html标签,php标记及css样式代码参考
- RabbitMQ TTL、死信队列在订单支付场景的应用
- 阿里云云效发布研发协同工具,以新的产研协同工作方式助力实现BizDevOps
- 基于MaxCompute+PAI的用户增长方案实践
- Duang,您的钉钉应用已上线!云开发5分钟快速打造钉钉会议室预定系统
- 基于X-Engine引擎的实时历史数据库解决方案揭秘