restful_api_python
Inhaltsverzeichnis
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.
Der interaktive Teil des Skripts fragt vom Anwender einige Informationen ab und erstellt dann automatisch eine Link-Aggregation mit den passenden Parametern.
<note>Die API-Referenzbibliothek „consumer.py“ werden wir hier in Kürze öffentlich zugänglich machen.</note>
Beispielimplementierung mittels Python
- omnipy.py
#!/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
restful_api_python.txt · Zuletzt geändert: 2024/06/09 10:29 von 127.0.0.1