Benutzer-Werkzeuge

Webseiten-Werkzeuge


restful_api_python

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

restful_api_python [2014/06/18 23:17] (aktuell)
benny angelegt
Zeile 1: Zeile 1:
 +====== 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.
 +
 +<​note>​Die API-Referenzbibliothek "​consumer.py"​ werden wir hier in Kürze öffentlich zugänglich machen.</​note>​
 +
 +===== Beispielimplementierung mittels Python =====
 +
 +<file 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()
 +</​file>​
 +
 +===== 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
 +
 +<​code>​
 +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 ... :)
 +>>> ​
 +</​code>​
 +
 +===== Resultierende Konfiguration auf dem OmniSwitch =====
 +
 +<​code>​
 +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
 +</​code>​
restful_api_python.txt · Zuletzt geändert: 2014/06/18 23:17 von benny