Sa presupunem un scenariu in care gestionam o solutie ce implica mai multe locatii interconectate intre ele prin MPLS. In fiecare dintre aceste locatii avem un CPE si suntem responsabili de configuratia prezenta pe el.
In articolul urmator voi prezenta un script simplu scris in Python, care ne poate ajuta sa automatizam procesul de backup-are pentru CPE-urile din administrare.
Descriere setup
Statia pe care lucram este reprezentata de hostul ‘Admin’.
Hostul ‘Management_server’ este un jump station ce ruleaza o distributie de Linux si are doua conexiuni, una la internet si o conexiune VPN prin care are conectivitate cu fiecare CPE. Pe server avem instalat Python si e activat serviciul SSH pentru a ne permite sa realizam conexiuni securizate peste legatura sa la internet.
CPE-urile sunt gestionabile din serverul de management prin Telnet.
Scriptul poate fi scris direct pe serverul de management cu ajutorul unui editor de text (nano, vim), sau poate fi urcat de pe hostul local (Admin) via scp.
Odata ce avem fisierul care contine scriptul, mai avem nevoie de un al doilea fisier care sa contina IP-urile de management ale fiecarui CPE. Exemplul prezentat apeleaza un fisier numit ‘loopbacks’. IP-urile de management sunt trecute unul sub altul.
Scriptul este rulat cu ajutorul comenzii python, urmata de numele fisierului in care l-am scris.
Odata pornit, ni se vor cere credentialele de conectare pe CPE-uri. Daca credentialele nu sunt stocate intr-un server de TACACS ci sunt prezente local, e necesar sa avem uniformitate pe toate routerele.
Dupa ce introducem credentialele, scriptul va initia o bucla si va incepe prin a citi prima linie din fisierul ‘loopbacks’ pentru a face telnet la adresa IP de management prezenta acolo. Se va conecta la CPE, va lista configul apoi il va stoca local intr-un fisier de forma ‘config_host_A.B.C.D_21-09-2019’ (unde A.B.C.D este IP-ul de management al hostului). Bucla se ruleaza pana sunt citite toate liniile din fisierul ‘loopbacks’.
Daca o adresa IP de management nu este accesibila, scriptul va intoarce mesajul ‘Hostul A.B.C.D este down’.
Scriptul pentru backup
#!/usr/bin/env python
import getpass
import telnetlib
import time
# Introduceti user si pass
user = raw_input("Introduceti username: ")
password = getpass.getpass()
# Deschide lista cu adrese de management
timestamp = time.strftime("%d"+"-"+"%m"+"-"+"%Y")
f = open ("loopbacks")
# Telnet pe CPE-uri
for line in f:
try:
print "Se salveaza configuratia hostului " + (line)
HOST = line.strip()
tn = telnetlib.Telnet(HOST)
tn.read_until("username: ")
tn.write(user + "\n")
if password:
tn.read_until("password: ")
tn.write(password + "\n")
tn.write("terminal length 0\n")
tn.write("show run\n")
tn.write("exit\n")
readoutput = tn.read_all()
saveoutput = open("config_host_" + HOST + "_" + timestamp, "w")
saveoutput.write(readoutput)
saveoutput.write("\n")
saveoutput.close
print tn.read_all()
except:
print("Hostul " + HOST + " este down \n")
#
#
# Done!
Run it & enjoy your coffee! :)
Niciun comentariu :
Trimiteți un comentariu