ansible 修改文件变量_可能是网工ansible的最强入门教程

ansible简介

今天我打算讲讲ansible,从网络的角度去看看ansible到底为什么这么火,同时也结合笔者自己的一些经历来看ansible有哪些局限。

去网上看ansible的资料,基本都是互相抄来抄去,再举几个自己的例子。这次我希望能有所突破,给大家一个不同视角的ansible。

本来想写成一篇,结果发现越想写,很多细节和坑都想给大家讲明白,所以计划两期 3-5期

  • 先带大家看看ansible,以及如何用ansible的raw模块对网络设备批量执行单条命令。

  • 如何用各厂商对应的cli模块去执行命令

  • 如何用playbook编排任务

  • 复杂的playbook使用指南(这个就是简单引路了大家按需自己去学)

    本文是基于ansible2.9.9的版本

初识ansible

ansible是一个配置管理和应用部署工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric、SaltStack   )的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

以上这段话,大家互相抄来抄去,本来也是我内部培训时的一段,这次我换个角度来解读一下

ansible是一个配置管理和应用部署工具

  • ansible可以去对服务器上(1-N台)的一些系统应用进行配置管理,更该部分参数。

  • ansible可以去安装一个新的软件应用,或者是一组软件应用。

以上本质是在多设备按情况(判断循环)指定每台设备要执行的命令(命令可封装成更加简单的模块,调用更方便)

集合了众多运维工具的优点

借鉴了很多的特

点,改善了很多缺点,

  • 轻量化:控制端无需安装一些数据库或者其他服务,被控制端无需安装agent。这点很重要,13年的时候我用过chef,安装不友好,被控制端配置的也很烦,非常重的一个东西。

  • 简单易学:通过yaml描述灵活调用模块、编排任务实现配置管理和部署应用,理论上不学开发也可使用。而其他或多或少依赖ruby、shell等,学习成本相对较少。

  • 可拓展性强,又可通过Python(或者其他语言,但肯定Python是最佳)二次开发实现很多自己的功能,编写自己的模块。

适用范围广

  • 功能:依托于ansible的模块(自带很多,又可定制)实现非常丰富的功能,比如安装数据库、配置交换机端口vlan等等。

  • 覆盖:可覆盖windows server  、linux 、网络设备。(理论上ssh可用,都可无侵入的使用ansible)

社区活跃,厂家支持

这点也很重要,从官方到社区、从民间到厂家都很支持,众多案例分享,资料多,发展快,这就是一个滚雪球的过程。

基于SSH,但是不止于SSH

基于ssh,致使适用范围广,但是自己写的接口只要对接上,也可以通过RESTful API 、Netconf等协议与设备交互。

以上是我对ansible的一些解读。

当然还有大家提到的安全可靠,幂等一致(执行一次和N次结果一样)。

插一句,名字来源:安德鲁的游戏,科幻小说,前几年的一部电影,是一个控制器可以控制XX光年以外的一些设备还是飞船之类的,很贴合运维。

有些资料提到可实现多级指挥,strong multi-tier solution。我理解的是付费版本可以实现类似多区域部署探针,由ansible tower统一控制。

架构组成

b72b3e0e5f2b28ecde98f43f05bb7731.png

1.connectior plugins (连接插件):用于连接主机,用来连接被管理端

2.core modules (核心模块):连接主机实现操作,它依赖于具体的模块来做具体的事情

3.custom modules (自定义模块):根据自己的需求编写具体的模块。

4.plugins (插件):完成模块功能的补充

5.playbooks(剧本):ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行。大家很大一部分都是在写playbook。

6.host inventory (主机清单):定义ansible需要操作主机(网络设备、控制器、可以对接ansible的第三方软件控制器)的范围,这个其实相当于一个简单文件描述的CMDB,可以对设备打标签、角色等等,可以在一些场景下筛选设备,不同设备执行不同的命令。这段大家可以细细看看ansible的一些官方文档

执行流程

f1d0be4283e88bd01700c14a5420e02a.png

这个图也是网上找的。ansible分为按照复杂编排执行和简单批量执行。基本逻辑是一样的:

  1. 根据指定的设备清单

  2. 调用指定的模块函数,传入指定的参数,实现批量配置。复杂编排中可能涉及到一些判断循环以及通知调用(比如升级完设备通知一个脚本重启设备)。

安装与配置

安装

系统要求:server端只能是Linux。windows端可以通过wsl,调用linux系统然后安装ansible(香,我用的是这种方法)软件要求:python>=2.6  目前已经支持3.X版本,也强烈建议大家使用3.6及以上版本。不要使用过老的Python版本。不要提上古版本2.X了。安装命令:yum install ansible 或者是pip install ansible。推荐大家pip安装,同时强烈建议大家关注一下你的pip在你安装的哪个Python路径下。

其他软件要求:Linux可能需要安装sshpass(因为ansible默认使用ssh进行连接)

配置文件

所在位置:/etc/ansible/ansible.cfg

可以通过ansible --version看默认的配置路径和版本信息、查找核心模块modules路径。

2fe09f8b1e18647f5caa941b06532c16.png

Ansible中的某些设置可通过配置文件(ansible.cfg)进行调整。对于大多数用户来说,库存配置应该足够了,但可能有其他原因要更改它们。比如主机清单的位置,系统默认的ssh端口号都可以设置,单一般默认的足够了。

pip安装不会生成这些默认的配置文件,参数都是内置在包里的,但是我们可以用命令生成到指定位置

beb1af9e25af540d088702097a3493c0.png

比如我这个是把整个配置导出到一个文件中,大家也可以导入到默认的位置(如果默认位置无)

ansible-config dump >> /etc/ansible/ansible.cfg

关于字段的解读大家可以去搜搜,给大家一个比较全的参考。

还是看官网吧,也可以自己百度,但是不保证版本升级,很多参数能对上。敏捷的原因,和新的考虑,导致向下兼容总有一些取舍。

https://docs.ansible.com/ansible/latest/reference_appendices/config.html

官方文档实在是学习的一个非常好的途径,Python、netmiko、requests、django、drf(非常优秀的RESTful框架)、ansible等等很多官方文档都写的很详细。每次读起来都觉得酣畅淋漓。

言归正传,我的稍微修改了一下配置。

aa3a19df2b78484a7743086d866dfa0a.png

  • 第一个是关闭第一次使用ansible连接客户端是输入命令提示,省事。

  • 第二个是执行命令的超时时间,比如保存配置,设备比较老旧或者网络不太好(我用的devnet的实验环境)会超时,避免这种情况。

安装好,根据情况调整配置后,我们可以开始写ansible了。

基于Ad-hoc运行批量执行命令

ad-hoc是一种快速模式,用于快速执行ansible的功能模块,执行的部分不用保存到文件(相对于playbook编排任务的文件)。

在执行之前,首先你需要一个主机清单,用于指定在哪些主机上运行ansible,刚才也说了,这是ansible的一个CMDB资产库,描述了你有哪些设备、类型、角色、厂商、用户名密码等等。

主机清单inventory

所在位置:/etc/ansible/hosts,也可以根据自己的需求更改位置)。大家可以看看官方文档 https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html 有很详细的说明。

既然是批量管理主机,那么就需要有管理对象,主机清单里写的都是被管理的主机,而且可以分组,每组都可以传递指定参数。样例:

[root@master / 22:48:58]#cat /etc/ansible/hosts
[ceshi]   -->【分组,组名】
10.0.0.11  # 一律使用默认的参数
10.0.0.13
10.0.0.14
[ceshi2]   -->【分组,组名】
10.0.0.15
10.0.0.16
10.0.0.17
[ceshi2:vars]   -->【可传一些变量,有一些系统变量,也可以自定义变量】
ansible_password='密码' -->【加上这个就不用输入密码,也不用密钥,但是真心不建议密码明文写在这里】
ansible_port=22
ansible_user='test'可设置登录用户
[ceshi3]   -->【分组,组名】
10.0.0.18 ansible_password='密码' ansible_port=22
10.0.0.19 ansible_password='密码' ansible_port=22
10.0.0.20 ansible_password='密码' ansible_port=22
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值