Das Script Snippet dient dazu in den Backupfoldern z.B. vom 20.09.2016 nach Interfaces mit einer bestimmten Description und einem gesetzten Parameter z.B. service-policy zu suchen und automatisch Konfiguration zu erzeugen die diese Config entfernt.
Configbeispiel Cisco Config (swt70/20.09.2016/swt70-config.txt):
interface GigabitEthernet1/0/47 description acp10 switchport access vlan 17 switchport mode access switchport nonegotiate spanning-tree guard loop service-policy input ACCESSPOINT ! interface GigabitEthernet1/0/48 description acp43 switchport access vlan 17 switchport mode access switchport nonegotiate spanning-tree guard loop service-policy input ACCESSPOINT !
#!/usr/bin/python import os from ciscoconfparse import CiscoConfParse import re buffer = [] buffer_f = [] # Folderstruktur: <switchname>/<backup_datum>/config.txt for dir in os.listdir("."): buffer.append("./"+dir+"/20.09.2016/") # Files zusammensammeln for x in buffer: try: for f in os.listdir(x): buffer_f.append(x+f) except: pass # Alle files abarbeiten for f in buffer_f: # Parser laden parse = CiscoConfParse(f) # Interfaces finden in config all_intfs = parse.find_objects(r"^interf") intfs = list() fault_intfs = list() # in den interfaces nach description .+acp.+ suchen for obj in all_intfs: if obj.re_search_children(r"description.+acp.+|description.+ACP.+"): intfs.append(obj) # fuer alle Suchergebnisse description .+acp.+ suche nach service-policy for i in intfs: if i.re_search_children(r"service-policy.+"): sp = i.re_search_children(r"service-policy.+") fault_intfs.append((i, sp[0].text) ) # wenn eine zeile im fault buffer ist if len(fault_intfs) > 0: # switchnamen aus dateinamen extrahieren n = re.search(r"^.+(swt[0-9][0-9]).+|^.+(SWT[0-9][0-9]).+",f) if n.group(1) is None: print n.group(2) else: print n.group(1) # no statements erzeugen for i, no_cmd in fault_intfs: print "!" print i.text print "no "+no_cmd print "! ---" else: pass
Das Script erzeugt folgenden Output:
swt70 ! interface GigabitEthernet1/0/47 no service-policy input ACCESSPOINT ! interface GigabitEthernet1/0/48 no service-policy input ACCESSPOINT ! ---