交换机批处理

因工作原因本人日常会跟大量交换机打些交道,而交换机管理起来如果没有什么集成的网管平台也会挺复杂的。我个人是出于好奇,想深入学习下网管平台那边关于交换机的自动化运维(备份)的一些原理。我用的是python+Tftp64+数据库 这样一个环境。

前期准备:python、Tftp64、HeidiSQL

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# 导入模块
import pymysql
import paramiko
import time
import os
import shutil


############################################################
###这一块主要是用来生成备份的文件名及文件夹名等
############################################################

now = time.strftime('%Y-%m-%d_%H-%M-%S', time.localtime(time.time()))
# 系统当前时间年份
year = time.strftime('%Y', time.localtime(time.time()))
# 月份
month = time.strftime('%m', time.localtime(time.time()))
# 日期
day = time.strftime('%d', time.localtime(time.time()))

# 切换到备份文件路径
os.chdir("D:/Tftpd64/backup")
#年路径
fileYear = os.getcwd() + '/' + year
#月路径
fileMonth = fileYear + '/' + month
#日路径
fileDay = fileMonth + '/' + day
#判断路径是否存在,不存在创建文件夹
if not os.path.exists(fileYear):
os.mkdir(fileYear)
os.mkdir(fileMonth)
os.mkdir(fileDay)
else:
if not os.path.exists(fileMonth):
os.mkdir(fileMonth)
os.mkdir(fileDay)
else:
if not os.path.exists(fileDay):
os.mkdir(fileDay)

############################################################
###这里是链接到数据库的操作
############################################################

# 1.连接到mysql数据库
db = pymysql.connect(host='数据库地址,在本机就localhost',
user='数据库账号',
password='数据库密码',
db='数据库db',
charset='utf8')
# localhost连接本地数据库 user 用户名 password 密码 db数据库名称 charset 数据库编码格式

cursor = db.cursor()
#cursor.execute("show tables;")
#swb = cursor.fetchall() # 返回执行SQL代码后的结果集,默认为元组
#打印
sql = "select * from huawei "
cursor.execute(sql)
f = cursor.execute(sql)
num = 0
#开始循环

####################################################################
###这里是记录备份的一个日志功能,就显示下正在备份哪台交换机,有没有问题等等
####################################################################

print('开始循环')
log = open('backup.log', 'a')
log.write(now+'——备份时间-----------------------------------\n')
log.close()
while True:
if num < f:
row = cursor.fetchone()
print('此时的row:')
print(row)
#上传文件
# 创建SSH对象
ssh = paramiko.SSHClient()
#print('创建SSH对象')
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

#获取地址
IP = row[0]
my = '存备份文件的服务器IP地址'
User = row[1]
Pwd = row[2]
# 连接服务器
#print('连接服务器')
ssh.connect(IP, 22, User, Pwd, look_for_keys=False)
# 执行命令
#print('执行命令')

file = IP + '_' + now
stdin, stdout, stderr = ssh.exec_command(
('tftp ' + my + ' put config.cfg %s.cfg') % file)

# 获取命令结果
res, err = stdout.read(), stderr.read()
result = res if res else err

#print(result.decode())
time.sleep(30)
# 关闭连接
ssh.close()
#print('远程结束')
print(row)
#如果文件上传成功
if os.path.exists('D:\\Tftpd64\\backup\\' + file+ '.cfg'):
print('上传成功')

#移动文件
mv = shutil.move
mv('D:\\Tftpd64\\backup\\' + file + '.cfg', fileDay)
#print(IP+'备份完成')
#写入日志
log = open('backup.log', 'a')
log.write(file+'____备份完成'+ '\n')
log.close()

time.sleep(5)
num +=1
else:
print(str(row) + '上传失败')
time.sleep(5)
num +=1
#否则退出循环
else:
print('--------------华为备份循环结束,退出循环------------------')
log = open('backup.log', 'a')
log.write('华为备份循环结束,退出循环\n')
log.close()
break