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 !
Das Script benötigt CiscoConfParse und es kann mit „pip install ciscoconfparse“ installiert werden.
#!/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 ! ---