一、Ansile介绍
1.1什么是Ansible
Ansible 批量管控工具,解决批量的在下游管理的设备上进行服务的安装和调试启动操作
例如 ;PSSH,Puppet,Chef ,Saltstack ,Ansble 等都是类似的工具
1.2 Puppet与Saltstack与Ansible的对比
Puppet与Saltstac都是-C/S模式,在被管控设备上必须安装客户端程序,而Ansible基于SSH无需在提前安装客户端程序,Ansible 和Saltstack 都是基于Python语言开发,消耗的都是CPU资源,
- Puppet ; 是最早的管理工具之一,linux,unix ,windos 平台都支持
客户端半个小时向服务器请求一次,保证配置的同步,下载配置文件,执行后,反馈给服务器通知已经同步成功 - Saltstack ; 加入MQ (message
Queen)消息队列,一条一条的去执行,执行命令的同时反馈结果,执行过程中需要等待客户端的反馈 - Ansible ; ansbile使用ssh
管理,不需要额外的安装客户端,Ansible功能都是通过插件完成,用就调取,不用就不调取,不会有任何影响,Ansible执行速度慢是Ansible的弊端,因为SSH本身就很慢,所以需要学习Ansible的优化,Ansible支持分布式,支持跨网段管理,Ansible1
的剧本使用YAML语言,所以学习者还需要学习YANML语言
1.3 Ansible的运行机制
(1)由上面的图可以看到 Ansible 的组成由 5 个部分组成:
- Ansible : ansible核心
- Inventory : 定义 Ansible 管理主机的清单 [ˈɪnvəntri] 清单
- Playbooks : 剧本;定义 Ansible 多任务配置文件,由Ansible 自劢执行
- Modules : 包括 Ansible 自带的核心模块及自定义模块
- Plugins : 完成模块功能的补充,包括连接SSH揑件、邮件揑件等
(2)Ansible 运行过程;
1.用户请求Ansible程序
2.ansible 查看主机清单针对,某些IP地址进行操作
3.是否使用剧本
4.调用核心模块或自定义模块
5.调用SSH插件,批量下发配置
(3)ansible 命令格式
ansible -i 主机清单 -m 模块 -a 参数
1.4 ansible 特性幂等性
ansible在运行时,如果发现所作的操作已经存在,或者复制的文件已经存在
则不会进行任何操作,相关参数:force ;幂等性校验,默认为no
1.5 ansible 运行模式
ad-hoc模式;单任务模式,每次只能调用一个模块,执行一个任务,基本无自动化概念可言
playbook:任务剧本(任务集),ansible 任务配置序列被成为Play book ,每个剧本中都包含一些任务,playbook模式可以同时调用N个模块,进行N多操作,可谓是自动化运维利器
四、Ansible主机清单
ansible在运行之前,需要先配置主机清单,主机清单存放要被管理运维的客户端的一些信息
包括主机ip地址,系统,ssh账号密码,等,在网络自动化中需要指定更多的参数
不仅如此在主机清单中还可以创建主机组,主机组里面还能嵌套主机组,还可以对主机组设置变量
设置变量后,在主机组的所有成员都可以享用这些变量
举例;
vi /etc/ansible/hosts ;编辑主机清单文件
[cisco] ;创建cisco组
[cisco:vars] ;定义cisco组模块变量
ansible_ssh_user="cisco" ;ssh用户名为cisco
ansible_ssh_pass="CCIE" ;ssh用户组名为CCIE
ansible_connection=network_cli ;连接方式使用cli
ansible_network_os=ios ;操作系统为cisco ios
ansible_become=yes ;是否获取高级权限
ansible_become_method=enable ;获取enable 的权限
ansible_become_pass=CCIE ;enable的密码为CCIE
[cisco:children] ;定义cisco组的孩子
router ;cisco组中有Router 组
switch ;cisco组中有switch组
[router] ;定义router组
R1 ;router组中有R1,与R2
R2
[switch] ;定义switch组
sw1 ;switch组中有sw1与sw2
sw2
查看主机清单;
ansible-inventory --list
三、Ansible 的模块介绍
(1)查看模块
ansible-doc -l #查看所有模块
ansible-doc -l | grep ^ios_ #查看支持思科IOS系统的相关模块
ansible-doc -s 模块名 可以获取模块的相关参数
(2)ios_command模块
用于查看基础的show 命令等
举例:
ansible R1 -m ios_command -a "commands='show run' " #查看所有配置
ansible R1 -m ios_command -a "commands='show ip int br " #查看接口
ansible R1 -m ios_command -a "commands='show version' " #查看版本
(3)ios_system 模块
用户配置一些简单的参数
举例:
ansible R1 -m ios_system -a "name_servers=8.8.8.8" #配置DNS服务器地址
ansible R1 -m ios_system -a "domain_name='R1111' " #修改域名
ansible R1 -m ios_system -a "hostname='R1111' " #修改主机名
ansible R1 -m ios_system -a "lookup_enabled=yes" #开启域名解析
(4)ios_static_route
常用参数
- prefix #路由信息前缀
- mask #路由信息掩码
- next_hop #配置路由信息下一跳地址
- admin_distance #设置路由的AD值
- aggregate #批量添加或删除路由
- name #添加路由信息的描述
- state #缺省为present 表示添加路由,设置absent表示删除路由
举例;
ansible R1 -m ios_static_route -a "prefix=2.2.2.2 mask=255.255.255.255 interface=ethernet0/1 next_hop=12.1.1.2 "
(5)ios_config
常用参数
- backup #设备配置备份
- lines #通过lines参数可以实现几乎所有的配置命令
- diff_against #通过 ——D 参数结合,实现配置文件对比
- parents #父命令,是上一条命令执行的前提
ansible cisco -m ios_config -a "backup=True" ;调用 ios_config模块 执行backup参数备份cisco组中所有配置
查看
ansible R1 -m ios_config -a "lines='ip add 12.1.1.1 255.255.255.0' parents='interface looback 0'"
;配置接口ip地址
ansible R2 -m ios_config -a "lines='network 12.1.1.0 0.0.0.255 area 0' parents='router ospf 1' "
;配置ospf