====== Erste Schritte mit der RESTful API (Python) ====== Das folgende Python-Skript soll einen Einblick in die ersten Schritte mit der OmniSwitch RESTful API mittels Python zeigen. Es wird Python benötigt um diese Schritte durchzuführen. * http://www.python.org/getit/ Der interaktive Teil des Skripts fragt vom Anwender einige Informationen ab und erstellt dann automatisch eine Link-Aggregation mit den passenden Parametern. Die API-Referenzbibliothek "consumer.py" werden wir hier in Kürze öffentlich zugänglich machen. ===== Beispielimplementierung mittels Python ===== #!/usr/bin/env python # # Benny's AOS Playground :) # from consumer import AOSAPI, AOSConnection def quicklag(interactive='0', debugoption=False): try: api = AOSAPI(AOSConnection( username = 'admin', password = 'switch', hostaddress = '192.168.1.4', #aosheaders = None, debug = debugoption )) api.login() if interactive == '0': lag = api.put('mib', 'alclnkaggAggTable', { 'mibObject0': 'alclnkaggAggIndex:40000012', 'mibObject1': 'alclnkaggAggName:Linkagg 12', 'mibObject2': 'alclnkaggAggSize:2', 'mibObject3': 'alclnkaggAggLacpType:1', 'mibObject4': 'alclnkaggAggActorAdminKey:12' }) lag4 = api.put('mib', 'alclnkaggAggPortTable', { 'mibObject0': 'alclnkaggAggPortIndex:1001', 'mibObject5': 'alclnkaggAggPortLacpType:1', 'mibObject9': 'alclnkaggAggPortActorAdminKey:12', }) lag4 = api.put('mib', 'alclnkaggAggPortTable', { 'mibObject0': 'alclnkaggAggPortIndex:1002', 'mibObject5': 'alclnkaggAggPortLacpType:1', 'mibObject9': 'alclnkaggAggPortActorAdminKey:12', }) pass else: print "Willkommen zu QuickLAG v1.0 erstellt fuer den \"KOMSA TecTeaming\"-Event bei Telenetwork" print "----------------------------------------------------------" print "Gib die gewuenschte LAG-ID ein: " try: lagid = input("QuickLAG-> ") except SyntaxError: print "\nSyntaxError -> Exiting..." #sys.exit(2) except KeyboardInterrupt: print "\nKeyboardInterrupt -> Exiting..." #sys.exit(2) print "LAG-ID: %s" % lagid print "Gib die LAG-Size ein (2, 4, 8): " try: lagsize = input("QuickLAG-> ") except SyntaxError: print "\nSyntaxError -> Exiting..." #sys.exit(2) except KeyboardInterrupt: print "\nKeyboardInterrupt -> Exiting..." #sys.exit(2) print "LAG-Size: %s" % lagsize print "Gib die Ports, getrennt durch Komma als gPort ein: " try: lagports = input("QuickLAG-> ") except SyntaxError: print "\nSyntaxError -> Exiting..." #sys.exit(2) except KeyboardInterrupt: print "\nKeyboardInterrupt -> Exiting..." #sys.exit(2) for i in lagports: print "LAG-Ports: %s" % i print "-------" print "Ok, anschnallen bitte ..." print "-------" lag = api.put('mib', 'alclnkaggAggTable', { 'mibObject0': 'alclnkaggAggIndex:'+ str((40000000 + lagid)), 'mibObject1': 'alclnkaggAggName:Linkagg %s' % lagid, 'mibObject2': 'alclnkaggAggSize:'+ str(lagsize), 'mibObject3': 'alclnkaggAggLacpType:1', 'mibObject4': 'alclnkaggAggActorAdminKey:'+str(lagid) }) if api.success() == True: print "Linkaggregation %s erfolgreich eingerichtet." % lagid else: print "Erstellung der Linkaggregation fehlgeschlagen: ", api.diag(), "-", str(lag['result']['error']['0']) for i in lagports: lag4 = api.put('mib', 'alclnkaggAggPortTable', { 'mibObject0': 'alclnkaggAggPortIndex:'+ str(i), 'mibObject5': 'alclnkaggAggPortLacpType:1', 'mibObject9': 'alclnkaggAggPortActorAdminKey:'+ str(lagid), }) if api.success() == True: print "Linkaggregationsport %s erfolgreich eingerichtet." % i else: print "Zuordnung des Ports zur Linkaggregation fehlgeschlagen: ", api.diag(), "-", str(lag4['result']['error']['0']) print "Alles erledigt, bitte Konfiguration auf Switch pruefen ... :)" api.logout() except HTTPError, e: api.logout() print "Error: " + e.msg except KeyboardInterrupt: print "\nKeyboardInterrupt -> Exiting..." api.logout() ===== Python-Skript in der Anwendung ===== Wenn man das Python-Skript nun anwendet, kommen wir zu folgenden Ausgaben/Ergebnissen. * quicklag(), Erstellt eine Link-Aggregation mit hinterlegten Standardwerten * quicklag(1), Fragt Informationen vom Nutzer ab und erstellt daraufhin eine Link-Aggregation * quicklag(1, True), Dies erzeugt zusätzliche Debugging-Meldungen Benjamins-MacBook-Pro:Omni Benny$ python Python 2.7.5 (v2.7.5:ab05e7dd2788, May 13 2013, 13:18:45) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> >>> from omnipy import quicklag >>> quicklag() >>> quicklag(1) Willkommen zu QuickLAG v1.0 erstellt fuer den "KOMSA TecTeaming"-Event bei Telenetwork ---------------------------------------------------------- Gib die gewuenschte LAG-ID ein: QuickLAG-> 13 LAG-ID: 13 Gib die LAG-Size ein (2, 4, 8): QuickLAG-> 2 LAG-Size: 2 Gib die Ports, getrennt durch Komma als gPort ein: QuickLAG-> 1003,1004 LAG-Ports: 1003 LAG-Ports: 1004 ------- Ok, anschnallen bitte ... ------- Linkaggregation 13 erfolgreich eingerichtet. Linkaggregationsport 1003 erfolgreich eingerichtet. Linkaggregationsport 1004 erfolgreich eingerichtet. Alles erledigt, bitte Konfiguration auf Switch pruefen ... :) >>> quicklag(1) Willkommen zu QuickLAG v1.0 erstellt fuer den "KOMSA TecTeaming"-Event bei Telenetwork ---------------------------------------------------------- Gib die gewuenschte LAG-ID ein: QuickLAG-> 13 LAG-ID: 13 Gib die LAG-Size ein (2, 4, 8): QuickLAG-> 2 LAG-Size: 2 Gib die Ports, getrennt durch Komma als gPort ein: QuickLAG-> 1003,1004 LAG-Ports: 1003 LAG-Ports: 1004 ------- Ok, anschnallen bitte ... ------- Erstellung der Linkaggregation fehlgeschlagen: 400 - Submission failed : This aggregate already exists 13 Zuordnung des Ports zur Linkaggregation fehlgeschlagen: 400 - Submission failed : This aggregable port already exists Zuordnung des Ports zur Linkaggregation fehlgeschlagen: 400 - Submission failed : This aggregable port already exists Alles erledigt, bitte Konfiguration auf Switch pruefen ... :) >>> ===== Resultierende Konfiguration auf dem OmniSwitch ===== OmniSwitch-> Fri Jul 12 13:32:58 : AAA Switch-Warning warning message: +++ WARNING! Switch Access Vulnerability. +++ WARNING! Admin user authentication using default password. -> -> show configuration snapshot linkagg ! Link Aggregate: linkagg lacp agg 12 size 2 admin-state enable linkagg lacp agg 12 name "Linkagg 12" linkagg lacp agg 12 actor admin-key 12 linkagg lacp agg 13 size 2 admin-state enable linkagg lacp agg 13 name "Linkagg 13" linkagg lacp agg 13 actor admin-key 13 linkagg lacp port 1/1 actor admin-key 12 linkagg lacp port 1/2 actor admin-key 12 linkagg lacp port 1/3 actor admin-key 13 linkagg lacp port 1/4 actor admin-key 13