使用Nornir3自动化备份交换机配置

本篇整理一下使用Nornir3自动化备份交换机配置的相关内容。不过经测试对于一些比较老的华三、华为交换机目前没能实现备份。

default.yaml

此文件可以放一些默认参数,当nornir在hosts.yaml文件中找不到的参数时,默认会读取该文件。

1
2
3
4
username: root
password: password123
port: 22
platform: hp_comware

hosts.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
sw1:
hostname: 192.168.0.1
username: root
password: 'qwer1234'
port: 22
platform: huawei
groups:
- huawei
sw2:
hostname: 192.168.1.1
port: 23
platform: hp_comware_telnet
groups:
- h3c
sw3:
hostname: 192.168.2.1
username: root
password: 'root'
port: 23
platform: cisco_ios_telnet
groups:
- cisco

平台加_telnet为telnet连接方式。

groups.yaml

1
2
3
4
5
6
7
8
9
10
11
12
h3c:
data:
backup_configs:
- display current-configure
huawei:
data:
backup_configs:
- display current-configure
cisco:
data:
backup_configs:
- show running-config

此文件一般放一些需要执行的命令相关。

脚本内容

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
29
from nornir import InitNornir
from nornir_netmiko import netmiko_send_command
from nornir_utils.plugins.tasks.files import write_file
from nornir_utils.plugins.functions import print_result,print_title
import datetime
import os

switch = InitNornir(config_file="config.yaml")
def backup(task):
cmds = task.host.groups[0].data.get('backup_configs')

for cmd in cmds:
result = task.run(netmiko_send_command,command_string=cmd,max_loops=500)
print(result)
output = result.result

file_name = datetime.datetime.now().strftime('%Y-%m-%d')
if not os.path.exists(file_name):
os.mkdir(file_name)
write_result = task.run(write_file,
filename=file_name+'/'f'{task.host.hostname}.txt',
content=output,
)


print_title("正在备份交换机配置.....")
results = switch.run(task=backup)
print_result(results)

  • 此脚本实现是创建一个日期为名称的文件夹,并读取交换机配置写入以IP地址的txt文本,然后放到当天日期名称的文件夹。
  • 可以结合linux平台、windows平台计划定时任务实现自动化备份配置。