Backup automatizado de switches con python (versión 2)

Buenas tardes.

Tal y como ya publiqué en la entrada que podéis leer aquí, tengo un script de python para realizar backup automatizados de los switches HP Procurve (ahora Aruba).

Os dejo por aquí la segunda versión del script, ya que lo he modificado para que se puedan hacer backups de todos los switches sea cual sea su pantalla de login.

Cada switch pide una cosa distinta al conectar por telnet: unos nada más conectar piden usuario y password, otros sólo piden password, otros hay que pusar enter antes de que te pida user y password, o sólo password…

Con éste script se solucionan todas las combinaciones posibles (recordad modificar la indentación del texto…).

Un saludo.


#!/usr/bin/python

import telnetlib
import datetime
import time
import os
import sys
import subprocess
import zipfile
#import tftpy

now=datetime.datetime.now()

os.mkdir("/media/oscar/ALMACEN/Backups_Switches/Backup_Switches_" + now.strftime("%d%m%Y"))

listado=[]
respuesta=""
index=-1

with open("/home/oscar/Backup_Switches/lista","r") as origen:
for line in origen:
listado.append(line[:-1])

for elemento in listado:

datos=elemento.split(",")

host = datos[0]
tn=telnetlib.Telnet(host)
print "Conectado a " + host + " (" + datos[1] + ")"
time.sleep(2)
respuesta=tn.read_very_eager()
index=respuesta.find("Username:")
if index!=-1:
tn.write(datos[2] + "\n")
time.sleep(2)
tn.read_until("Password:")
tn.write(datos[3] + "\n")
time.sleep(2)
else:
tn.write("\n")
time.sleep(2)
if datos[2]!="":
prueba=tn.read_very_eager()
index1=prueba.find("Username:")
if index1!=-1:
#tn.read_until("Username:")
tn.write(datos[2] + "\n")
time.sleep(2)
tn.read_until("Password:")
tn.write(datos[3] + "\n")
time.sleep(2)
else:
tn.write(datos[3] + "\n")
time.sleep(2)
tn.read_until(str(datos[1]) + "#")
tn.write("terminal length 1000\n")
tn.write("show run\n")
time.sleep(2)
tn.write("exit\n")
time.sleep(2)
tn.write("exit\n")
time.sleep(2)
tn.write("y")
output = tn.read_all()
tn.close()
filename = "tmp"
fp=open(filename,"w")
fp.write(output + "\n")
fp.close()
with open("tmp") as myfile:
suma = sum(1 for line in myfile)
myfile.close()
contador = 1
with open("tmp","r") as input:
with open("/media/oscar/ALMACEN/Backups_Switches/Backup_Switches_" + now.strftime("%d%m%Y") + "/backup_" + datos[0] + "_" + now.strftime("%d%m%Y") + "_" + now.strftime("%H%M") + ".txt","wb") as output:
for line in input:
if contador!=1 and contador!=suma and contador!=suma-1:
output.write(line)
contador=contador+1
input.close()
output.close()
os.remove("tmp")

zf=zipfile.ZipFile("/media/oscar/ALMACEN/Backups_Switches/Backup_Switches_" + now.strftime("%d%m%Y") + ".zip", "w")
for dirname, subdirs, files in os.walk("/media/oscar/ALMACEN/Backups_Switches/Backup_Switches_" + now.strftime("%d%m%Y")):
zf.write(dirname)
for filename in files:
zf.write(os.path.join(dirname,filename))
zf.close()

for root, dirs, files in os.walk("/media/oscar/ALMACEN/Backups_Switches/Backup_Switches_" + now.strftime("%d%m%Y"), topdown=False):
for name in files:
os.remove(os.path.join(root,name))
for name in dirs:
os.rmdir(os.path.join(root, name))
os.rmdir("/media/oscar/ALMACEN/Backups_Switches/Backup_Switches_" + now.strftime("%d%m%Y"))

origen.close()
sys.exit()

Deja un comentario