背景

网络运维,我们有很多时间是在准备配置的路上,咱们之前也讲过,从脑海中或者是从自己的宝藏笔记中找出模板,一顿操作猛如虎,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的批量配置生成相关推荐

  1. ansible 修改文件变量_ansible学习心得

    inventory常用参数说明 ansible_ssh_host: 将要连接的远程主机名与你想要设定的主机别名不同,可以通过此变量设置 ansible_ssh_port: ssh端口号,如果不是默认的 ...

  2. ansible 修改文件变量_Ansible自动化从零到入门

    我们知道现在自动化工具中,最简单.易于上手,而且最流行的当属Ansible莫属了.和Chef.Puppet等Ruby工具甚至同时Python系的Saltstack等CS架构的自动化工具相比虽然执行性能 ...

  3. ansible 修改文件变量_Ansible Playbook中的变量与引用

    Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. Ansible自动化运维 前言 前面有说到使用playbook来搞一些复杂的功能, ...

  4. 安卓上传文件时修改文件名称_使用mmv命令批量修改文件名称

    在 Linux 中使用 mv 命令可以重命名或者移动文件及目录,但是它不支持一次重命名多个文件.本文介绍mmv的使用方式,使用通配符模式移动/复制/追加/链接多个文件 环境 Centos7.7 安装m ...

  5. dockerfile 修改文件权限_网易技术实践|Docker文件系统实战

    在本文中,我们来实战构建一个Docker镜像,然后实例化容器,在Docker的生命周期中详细分析一下Docker的文件存储情况和DockerFile优化策略. 在开始实战之前,我们先介绍一个概念,联合 ...

  6. 中修改环境变量_嵌入式 Linux下永久生效环境变量bashrc

    作者:skdkjxy 原文:http://blog.sina.com.cn/s/blog_8795b0970101f1f9.html .bashrc文件 在linux系统普通用户目录(cd /home ...

  7. bat修改文件内容_批量获取文件名,这几招太高效了!

    每周末整理好重点报告库内容后,风弦都会发一篇推文,文章中为大家列出本周收录报告的清单. 有朋友就很好奇,我是怎么获取这么多文件的文件名的,复制粘贴么?当然,不是!重点报告库每周收录100+最新报告,复 ...

  8. java生成iso9660工具_基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.0.0版)...

    TableGo_20210212 v7.0.0 正式版发布,此次版本更新如下: 1.新增对DB2数据库的支持 2.新增按字段生成文件,支持把字段.JSON.XML数据转换成任何代码 3.新增大量新的自 ...

  9. python批量图像处理_基于python代码批量处理图片resize

    出差做PPT,要放一些图片上去,原图太大必须resize,十几张图片懒得一一处理了,最近正好在学python,最好的学习方式就是使用,于是写了一个批量处理图片resize的代码,在写的过程中,熟悉了p ...

最新文章

  1. 信科c语言实验程序修改题_豆瓣评分 9.3,史上最好的 C 语言著作,竟然翻车了.........
  2. html中投影效果图,利用CSS3(box shadow)制作边框投影
  3. notepad++取消语法检测
  4. android 开机启动服务。
  5. 自制vue组件通信插件:教你如何用mixin写插件
  6. Reuse library debug in Chrome - phase1 init phase
  7. mysql数据库(10):数据 备份
  8. 简单的学习一下node吧——还在学习中~~~
  9. mrp手机qq2008下载-MRP格式的手机QQ2008软件介绍及如何正确安装MRPQQ2008挂Q版
  10. 代码审查codereview工具
  11. 最小二乘拟合曲线证明+正则方程
  12. 云计算是什么?新手学习云计算的学习路线
  13. My interest is the rules/ways to implement, go and insist with interest!!!
  14. C#WinForm判断界面上多个TextBox控件的值是否为空
  15. 基于FPGA的UART全双工数据控制器
  16. 灵动微 MM32 多路ADC-DMA配置
  17. hss网元 java,EPC网络中网元HSS的英文全称是()。
  18. Cmake在VS下设置MT
  19. 【一 zedboard】PS端实现打印hello world
  20. 汉仪尚巍手书_汉仪尚巍手书字体下载|

热门文章

  1. 22岁何同学自制硬核AirDesk!苹果都做不来的超大充电桌,稚晖君点赞
  2. 妙到巅峰的8个简洁数学证明(文科生都能看懂),隐隐触摸到一丝只属于神的智慧气息……...
  3. 施一公:优秀博士如何养成
  4. 谁能救得了中兴?下一个是华为吗?
  5. php 去除标签内样式,PHP去除html标签,php标记及css样式代码参考
  6. RabbitMQ TTL、死信队列在订单支付场景的应用
  7. 阿里云云效发布研发协同工具,以新的产研协同工作方式助力实现BizDevOps
  8. 基于MaxCompute+PAI的用户增长方案实践
  9. Duang,您的钉钉应用已上线!云开发5分钟快速打造钉钉会议室预定系统
  10. 基于X-Engine引擎的实时历史数据库解决方案揭秘