不懂自动化的程序员不是好网工,利用Ansible实现网络设备备份

2023-10-13 10:05:03

前面介绍了一款运维神器,其中里面有一个强大的功能叫做playbook,我们可以通过写一些剧本来批量完成一些任务,这对运维人员带来了很大的帮助。比如我们需要在大量服务器上安装一项服务时,我们只需写个playbook一执行这些服务器就批量安装了,而不需要我们一台台登录上去安装。

那么对于我们网络工程师而言是不是也可以利用ansible来管理众多网络设备呢?答案是肯定的。比如有这样一个需求,网络工程师需要定期备份所有网络设备的配置,你们会怎么做的,利用远程工具比如SecureCRT一台一台登录到设备,比如思科设备输入“show run”命令导出配置。如果数量少一些还好,如果数量多几十台上百台的设备,我想也会是挺费时间的一件事吧。可能你会想到肯定可以用程序解决,比如用python写个程序脚本,但是我想大多数网工毕竟不是专业的程序员出生,编程能力往往还是有限的,而且编写程序可以说还是相对复杂的。但是我想说的网络工程师如果掌握一下ansible,就可以达到事半功倍的效果,而且ansible playbook的写法按格式套路是很容易上手的,比编程而言实在是太简单了。因为ansible本身底层就是用python编写的工具,集成了的大量的模块,你只要学会使用这些模块就行了,而不需要自己去编写,这可以说给网工们带来了巨大的方便。下面我就简单介绍一下如何利用ansible实现网络设备的备份。


1.Ansible是用ssh服务去管理设备的,所以网络设备上需要开启SSH服务,以思科路由器为例:

crypto key generate rsa general-keys modulus 1024 #生成秘钥

aaa new-model #启用3a认证

username cisco password cisco #创建用户名和密码

ip domain name cisco #定义域名

line vty 0 4 #在vty线路下开启ssh

transport input ssh

2.Ansible服务器上配置hosts添加网络设备信息,可以进行相应分组和命名。

# vi /etc/ansible/hosts

[Cisco]

Cisco2911 ansible_host=192.168.18.100

Cisco2921ansible_host=192.168.18.108

3.编辑一个playbook,通过之前的介绍,我们知道playbook是通过task任务来执行的,这里使用两个模块ios_command和copy模块来执行。模块ios_command使用命令“show run”输出配置,copy模块讲输出的配置保存到本地文件。

# vi /etc/ansible/playbooks/bk.yaml

---

- hosts: Cisco2911

connection: local

tasks:

- name: Show Run

ios_command:

commands: show run

provider:

username: cisco

password: cisco

authorize: yes

auth_pass: cisco

register: config

- name: Save Output

copy:

content: "{{config.stdout[0]}}"

dest: "/etc/ansible/cisco.txt"

4.执行结果。


可以看到playbook的编写是相当简洁明了,都不用太多解释,首先使用ios_command模块,使用命令"show run"输出配置,需要传入一些参数,用户名和密码,还有登录后的特权密码。然后将输出的内容定义到register变量中,最后通过copy模块保存到本地就行了。