ansible是一个python开发的基于ssh的配置管理工具,多用于devops生态。同时,一些网络厂商也为ansible开发了响应的模块用于批量管理网络设备。

相对自己拿pyhton的netmiko自己写一些脚本,ansible现成的模块更加高效。

安装

以centos7为例,直接yum安装即可

1
2
3
4
yum -y install ansible

ansible --version
#查看ansible版本

配置

ansible中有以下几个概念

  • inventory: 仓库,需要被管理的主机列表和基本信息
  • playbook: 剧本,由多个task组成
  • modules: 模块,实现具体的功能

inventory中可以有多个group,执行时需要指定inventory文件,或者特定的group;ansible默认读取的是/etc/ansible/hosts文件,也可以用-i参数来指定inventory所在的位置,下面是一个配置示例

1
2
3
4
5
6
7
8
9
10
[ios]
10.211.55.27
10.211.55.26
10.211.55.24
10.211.55.25

[ios:vars]
ansible_ssh_user=cisco
ansible_ssh_pass=cisco
ansible_connection=local

在介绍playbook之前,先看下拓扑:

这里要实现的是对,配置NTP,SNMP,接口IP以及启用ospf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
---
- hosts: ios
gather_facts: false
connection: local
vars_files:
- interface.yml

tasks:
# 配置 ntp server
- name: configure ntp server
ios_config:
lines: ntp server 10.1.1.1

# 配置 snmp
- name: configure snmp
ios_config:
lines: snmp-server community network-read RO

- name: configure ip address and ospf
ios_config:
lines:
- no shutdown
- ip address {{ item.ip }} {{ item.mask }}
- ip ospf 1 area 0
parents: interface {{ item.port }}
with_items: "{{ interfaces }}"
when: (item.router == inventory_hostname)
...

前面显示指定了需要配置的设备组,然后引入了一个变量文件interface.yml,内容是设备接口对应的ip地址:

1
2
3
4
5
6
7
8
9
10
11
interfaces:
- {router: 10.211.55.27, port: e0/0, ip: 12.1.1.1, mask: 255.255.255.0}
- {router: 10.211.55.27, port: e0/1, ip: 13.1.1.1, mask: 255.255.255.0}
- {router: 10.211.55.26, port: e0/0, ip: 12.1.1.2, mask: 255.255.255.0}
- {router: 10.211.55.26, port: e0/1, ip: 23.1.1.2, mask: 255.255.255.0}
- {router: 10.211.55.26, port: e0/2, ip: 24.1.1.2, mask: 255.255.255.0}
- {router: 10.211.55.25, port: e0/0, ip: 24.1.1.4, mask: 255.255.255.0}
- {router: 10.211.55.25, port: e0/1, ip: 34.1.1.4, mask: 255.255.255.0}
- {router: 10.211.55.24, port: e0/0, ip: 13.1.1.3, mask: 255.255.255.0}
- {router: 10.211.55.24, port: e0/1, ip: 23.1.1.3, mask: 255.255.255.0}
- {router: 10.211.55.24, port: e0/2, ip: 34.1.1.3, mask: 255.255.255.0}

with_items是循环,读取interface这个列表,一次作为item,当符合when的条件时就执行,不符合就跳过。

执行playbook:

1
2

modules配置
上面playbook中的ios_config就是ansible的一个模块。它能在思科ios系统的config模式下执行各种命令。
其他各种模块可以查看官网的介绍

参考文档:
ansible 网络自动化管理