ansible 网络自动化管理

故事背景

作为一名网络工程师,维护公司办公网络,关于交换机的批量配置变更和配置备份一直是心中难以言明的痛,特别是每到节假日前所有设备的配置保存和配置备份 和 NTP等服务器变更IP的时候 都无情的鞭笞着网络工程师的心灵和肉体。好几百台设备啊。

技术演变简述

回顾过去的历史,就是和网络自动化斗争的历史

最开始的时候 我们使用 SecureCRT 的Scripts ,用VB写脚本模拟SSH
或者telnet登陆设备然后操作。

对于中小型企业 网络管理员来说 securecrt脚本几乎没有学习成本, 喜欢脚本运维的同学 推荐 去看一下 https://github.com/191801737/securecrt_network

后来用python 写脚本 使用parimiko 或者netmiko 连接到设备操作。

现在我们想要一个更自动化的系统 当遇到ansible以后 感慨这么多年终于等到了。

简介

ansible简介

Ansible is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime rolling updates

Ansible是IT自动化工具。它可以配置系统,部署软件,并编排更先进的IT任务,如连续部署或零停机滚动更新。

环境搭建

服务器操作系统推荐使用ubuntu,ansible 更新迭代很快,ubuntu系统会让你更快获得新版本的功能

ansible 安装

$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansible

验证安装

root@ansible:~# ansible --version
ansible 2.3.0.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/usr/share/my_modules/']
  python version = 2.7.12 (default, Nov 19 2016, 06:48:10) [GCC 5.4.0 20160609]

这个时候ansible就安装好了。

配置ansible

ansible 有几个组件 很重要

inventory : 可以理解成 存在被管理主机的地方

playbook : 配置管理使用

modules: 提供实现功能的模块

inventory 配置

新建一个cisco组 里面放上你要配置的交换机

[root@es-node1 playbook]# vi /etc/ansible/hosts  
[cisco]   
10.101.24.241 ansible_ssh_user=cisco ansible_ssh_pass=cisco

playbook 实现交换机备份保存配置

我们来实现 交换机的配置备份和配置保存

[root@es-node1 playbook]# vi ios_conf2.yml 

---
- hosts: cisco
  gather_facts: false
  connection: local

  tasks:
# 备份文件 默认存放到ansible 当前目录
  - name: backup configuration
    ios_config:
      backup: true


# 保存配置
  - name: save configuration
    ios_config:
      save: true

执行 playbook

查看效果:
会在当前目录新建一个 backup目录 备份文件会加上时间戳

playbook 实现交换机ntp snmp

假设你的ntp 服务器地址变更, 为了搞监控也要更新snmp

我们来写个配置 playbook

[root@es-node1 playbook]# cat ios_conf2.yml 
---
- hosts: cisco
  gather_facts: false
  connection: local

  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

执行playbook

验证一下结果

modules 配置

看了上面的介绍 只要把交换机ip写在 /etc/ansible/hosts中,

在简单写个playbook 就实现交换机自动化 批量 管理配置,是不是很爽。

具体实现功能就是就幕后英雄 modules

到目前位置 ansible 官方提供了 很多 Network Modules
http://docs.ansible.com/ansible/list_of_network_modules.html

如果你们公司使用的都是思科交换机,你可以很方便的实现全自动配置管理,
因为思科公司提供了各种配置的modules, 老大哥就是良心啊。

Ios

ios_banner - Manage multiline banners on Cisco IOS devices
ios_command - Run commands on remote devices running Cisco IOS
ios_config - Manage Cisco IOS configuration sections
ios_facts - Collect facts from remote devices running Cisco IOS
ios_system - Manage the system attributes on Cisco IOS devices
ios_template (D) - Manage Cisco IOS device configurations over SSH
ios_vrf - Manage the collection of VRF definitions on Cisco IOS devices

华为的数据中心 Cloudengine 系统交换机也 提供了官方的modules

然而 遗憾的是 对于国内广大公司 使用的 h3c 华为园区S系列交换机 目前官方并没有 modules可用。

我们现在处于在Developing h3c 华为s系列 Modules阶段

http://docs.ansible.com/ansible/dev_guide/developing_modules.html#id2

结束语

AUTOMATION FOR EVERYONE

Ansible is designed around the way people work and the way people work together.