Autobackup voor cisco

Cisco apparatuur gaat niet vaak stuk, daar is de prijs ook naar. Maar als er wel een stuk gaat heb je dan wel een recente backup klaar liggen om in een vervangende switch te stoppen?
Na elke change is het de bedoeling om niet alleen een write te doen maar ook een "copy run tftp". Maar ja, dat schiet er wel eens bij in. Aangezien het een kleine moeite is om automatisch backups te maken is dat dan een betere oplossing.
Dit kan heel mooi met ansible maar voor de mensen die dat niet kennen is dat misschien net lastig, ansible heeft wel een leercurve met zijn config en playbooks. Het kan ook eenvoudig met een python script en de netmiko module.
Het script is eenvoudig en doet wat het moet doen, het kan nog veel mooier door de switch namen en adressen in een aparte file te zetten en daaruit te lezen maar nodig is dat niet.
Het enige wat nodig is om de namen en adressen van al je switches onderin het script op te nemen en bovenin de credentials en het adres van de tftp server op te nemen.

Code

#!/usr/bin/python3
# file    : backup.py
# author  : Wouter Barendsen
# created : 2021-03-08 18:16
# modified: 2024-02-25 16:46:33
# 
# crontab: 0 3 * * * cisco-backup.py >cisco-backup.log
import netmiko,time,sys

UserName="script"
PassWord="Heelgeheimwachtwoord"
TftpServer="192.168.2.1"
TimeStamp=time.strftime('%Y-%m-%d %H:%M', time.localtime(int(time.time())))
Debug=False

if len(sys.argv) >= 2:
  if sys.argv[1] == "-d": Debug=True
  if sys.argv[1] == "-h": Hellup()

def Hellup():
  print("cisco-backup.py  1.0  Wouter Barendsen  2021                           ")
  print("  Maakt een backup van diverse (cisco) switches naar een tftp server   ")
  print("  Als er van alle switches elke nacht een backup gemaakt wordt dan is  ")
  print("  er altijd een recente config beschikbaar als er een switch stuk gaat.")
  print("")
  sys.exit(1)

def SwitchCommand(Naam,Ip):
  try:
    net_connect = netmiko.ConnectHandler(device_type='cisco_ios',ip=Ip,username=UserName,password=PassWord)  
    net_connect.enable()
    result1=net_connect.send_command("copy run tftp://"+TftpServer+"/autobackup-"+Naam+".txt", expect_string=r"Address or name of remote host")
    result2=net_connect.send_command('\n', expect_string=r"Destination filename")
    result3=net_connect.send_command('\n', expect_string=r"!!")
    result4=net_connect.send_command('\n', expect_string=r"#")
    result5=net_connect.disconnect()
    if Debug: print(result1,result2,result3,result4,result5)
    # beetje vaag maar de regel met gekopieerde bytes staat soms in result3 en soms in result4, timing dingetje denk ik
    result=result3+result4
    result=result.replace("!!","")
    for line in result.split("\n"):
      if "byte" in line: Message=line
    return(Naam+" "+Ip+" : "+Message)
  except netmiko.exceptions.NetmikoTimeoutException:
    return(">> Error connecting to "+Naam+" "+Ip)

# Zet hier voor al je switches een regel neer
print(TimeStamp+": Backing up cisco switches to "+TftpServer+"...")
print(SwitchCommand("wb-sw01","192.168.2.254"))
print(SwitchCommand("wb-sw02","192.168.2.242"))
print(SwitchCommand("wb-sw03","192.168.2.243"))

Output

2024-02-25_16:46: Backing up cisco switches to 192.168.2.1...
sw01 192.168.2.254 : 7118 bytes copied in 0.535 secs (13305 bytes/sec)
sw02 192.168.2.10 : 3164 bytes copied in 0.369 secs (8575 bytes/sec)
sw03 192.168.2.11 : 3073 bytes copied in 0.361 secs (8512 bytes/sec)

Als je het wat vindt dan hoor ik dat graag.




Geef hieronder uw commentaar, mening of aanvullingen op deze pagina en lees de eventuele meldingen van andere lezers.

naam:
email:
spamcheck: 1999+1=...
opmerking:
   



Website door Wouter Barendsen, 2005-2024