一、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的运行机制

django ansible playbook 自动化部署 ansible 网络自动化_linux

(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组中所有配置

查看

django ansible playbook 自动化部署 ansible 网络自动化_linux_02

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