5. Juli 2006
AXL ist eine SOAP-Schnittstelle von Cisco zur Verwaltung des Cisco Callmanager. Eine grosse Sammlung von Funktionen (etwa 200) Zum Aufruf einer Funktion wird eine XML-struktur an den Server übertragen Server antwortet mit XML <SOAP ENV:Envelope xmlns:soap ENV=... > <SOAP ENV:Body> <a x l : a d d L i n e x m l n s : a x l=... > INHALT </ a x l : a d d L i n e > </SOAP ENV:Body> </SOAP ENV: Envelope>
Für python gibt es fertige frameworks zum Ansprechen von SOAP-Servern. SOAPpy: Kann Reihenfolge der Argumente nicht beibehalten, weil intern dictionary verwendet wird Zolera: Braucht python-2.4 und ist sehr kompliziert zu bedienen. Beides hätte nur von der Verwaltung der SOAP-Schnittstelle befreit. Der meiste Aufwand von pyaxl steckt in der Verwaltung der Daten Wie funkioniert die pyaxl-variante?
Beispiel für dictionary-struktur: a r g = { x : { a : c, b : e, a @ a t t r i b a : ab, a @ a t t r i b b : bb, y : { L : [ [ x, z, zz ], #data [{ s : p }, { a : b, c : d }, { b : c } ] #a t t r i b u t e s ] }} } ===> <x> <a a t t r i b b= bb a t t r i b a= ab >c</a> <y> <L s= p >x</l> <L a= b c= d >z</l> <L b= c >zz</l> </y> <b>e</b> </x>
axl node axl node ist eine DOM-ähnliche Datenstruktur. Hat ähnliche Funktionen wie DOM: set name(name), set data(text), set attr(name, val), child nodes(), append child(node) Kann mit dictionary initialisiert werden node = a x l n o d e ( a ) node. a p p e n d c h i l d ( a x l n o d e ( x, y ) ) node. a p p e n d c h i l d ( a x l n o d e ( y, z ) ) p r i n t node. t o s t r i n g ( ) ==> <a> <x>y</x> <y>z</y> </a>
Wie funktionieren die SOAP-Aufrufe? Im Modul CCMAXL werden die SOAP-Aufrufe ausgelöst Ein Aufruf braucht als Parameter ein AXLArg: d i c t = { p a t t e r n : 44441, r o u t e P a r t i t i o n N a m e : p i n t e r n, r o u t e F i l t e r I d : } arg = AXLArgs. g e t L i n e A r g ( d i c t ) r e t = CCMAXL. ccm. c a l l ( arg )
Die AXLArgs wissen, wie die zu rufende Funktion heisst. Sie haben eine Liste aller erlaubten XML-Unterelemente, mit der erlaubten Reihenfolge. c l a s s addcssarg ( AXLArg ) : keys = ( name, d e s c r i p t i o n, c l a u s e, d i a l P l a n W i z a r d G e n I d, members ) r o o t = newcss
CCMProfile, CCMLine,... CCMAxl, AXLArgs, axl_node Callmanager (AXL API)
Die meisten CCM-Objekte haben drei mögliche Zustände: Construktor() Nicht existent update() Angelegt remove() update() Verändert update()
Die getter-/setter-funktionen der CCM-Objekte werden mit Hilfe der AXLArgs erzeugt. def g e t a t t r ( s e l f, name ) : i f name. s t a r t s w i t h ( s e t ) : name = name [ l e n ( s e t ) : ] i f name i n s e l f. keys : return lambda x : s e l f. set param ( name, x ) e l i f name i n s e l f. keys : e l t = s e l f. d a t a [ name ] i f e l t : data = e l t [ 0 ]. data or return lambda : data
#Neues Device a n l e g e n d e v i c e = CCMDevice ( SEP0016C8FD68FE ) d e v i c e. s e t d e s c r i p t i o n (.... ) d e v i c e. s e t...... d e v i c e. update ( ) #d e s c r i p t i o n aendern d e v i c e = CCMDevice ( SEP0016C8FD68FE ) p r i n t d e v i c e. d e s c r i p t i o n ( ) d e v i c e. s e t d e s c r i p t i o n ( Neue B e s c h r e i b u n g ) d e v i c e. update ( )
#L i n e d e v i c e = CCMDevice ( SEP0016C8FD68FE ) l i n e = d e v i c e. l i n e ( 1 ) p r i n t l i n e. l a b e l ( ) d e v i c e. s e t l i n e ( 1, None ) d e v i c e. s e t l i n e ( 3, l i n e ) d e v i c e. update ( )
Fragen?