Zum Inhalt springen Weiter zur Suche
Testversion
Blog

aXAPI Python SDK Beispiele

In früheren Beiträgen zu Python + A10 aXAPI wurde das Skript von Grund auf mit nur 2.7 Standardbibliotheken geschrieben. Die HTTP-API von A10 macht es einfach, mit fast allen Sprachen zu interagieren, auch mit Python.

Eine weitere Möglichkeit, mit Python mit dem A10 Gerät zu interagieren, ist das A10 Python SDK. Es kann im Support-Bereich unter 3rd Party SDK heruntergeladen werden.

Hier versuche ich, einige Beispiele unter Verwendung des AX Python SDKs zu zeigen. Ich verwende IPython, weil es die verfügbaren Methoden und Attribute einfach darstellen kann. Aber es ist nicht erforderlich. Die interaktive Eingabeaufforderung wird unter dem Verzeichnis des SDKs ausgeführt, um die SDK-Module zu importieren.

Wenn Sie es vorziehen, stellen wir Ihnen die axAPI-Dokumentation im HTML-Format zur Verfügung.

Die folgenden Beispiele sind dem Skript main.py entnommen , das im SDK enthalten ist.

Jetzt geht's los:

1. Starten Sie die IPython-Eingabeaufforderung und importieren Sie das method_call-Modul:

# ipython
Python 2.7.5 (default, Oct 8 2013, 12:19:01)
Type "copyright", "credits" or "license" for more information.

IPython 0.13.2 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.

In [1]: import method_call

2. Sie können einige der eingebauten Selbsthilfefunktionen verwenden, um die verfügbaren Funktionen zu sehen:

In [2]: dir(method_call)
Out[2]:
['AXAPI_DEVICE',
'AXAPI_LOGIN',
'AXAPI_SESSION_ID',
'AxAPIError',
'AxApiContext',
'AxError',
'AxObject',
'REST_URL',
'XML',
'_XmlDict',
'_XmlList',
'__builtins__',
'__doc__',
'__file__',
'__name__',
'__package__',
'_get_request_url',
'_send_request',
'_set_session_id',
'call_api',
'connect_patched',
'httplib',
'json',
'socket',
'ssl',
'urllib',
'urllib2']

In [3]: help(method_call)
Help on module method_call:

NAME
method_call - method_call module.

FILE
/home/echou/SDK-Python-aXAPI/method_call.py

DESCRIPTION
This module is used to perform the calls to the AX RESTful interface.

Author: Richard Zhang, A10 Networks (c)
e-mail: rzhang@a10networks.com
Date : 03/04/2012

3. Führen Sie den API-Aufruf durch, um die SessionID für das A10-Objekt zu erhalten:

In [4]: a10Obj = method_call.AxApiContext("192.168.148.161", "admin", "a10").authentication()
username=admin&password=a10&method=authenticate
https://192.168.148.161:443/services/rest/V2/
<?xml version="1.0" encoding="utf-8" ?><response
status="ok"><session_id>19b69d604c5bf0b27d79595b1b50e3</session_id></response>

4. Auch hier wird das Objekt mit Hilfe der eingebauten Selbsthilfefunktionen untersucht:

In [5]: dir(a10Obj)
Out[5]:
['__class__',
'__delattr__',
'__dict__',
'__display__',
'__doc__',
'__format__',
'__getattr__',
'__getattribute__',
'__getitem__',
'__hash__',
'__init__',
'__module__',
'__new__',
'__obj_name__',
'__obj_readonly__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__setitem__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__weakref__',
'__xml_convrt__',
'_appendString',
'_generateDictInUrl',
'_generateListInUrl',
'_set_properties',
'authentication',
'device_ip',
'dump',
'get',
'getInfo',
'getObjectDict',
'getRequestPostDataJson',
'getRequestPostDataXml',
'is_login',
'password',
'session_id',
'switchContext',
'username']

In [6]:
In [7]: a10Obj.username
Out[7]: 'admin'

In [8]: a10Obj.session_id
Out[8]: '19b69d604c5bf0b27d79595b1b50e3'

In [9]: a10Obj.getInfo
Out[9]: <bound method AxApiContext.getInfo of AxApiContext(session_id = '19b69d604c5bf0b27d7..., is_login = True, device_ip = '192.168.148.161', username = 'admin')>

In [10]:

5. Verwenden Sie das slb-Modul, um (Überraschung), slb-bezogene Dinge zu tun:

In [10]: from slb import VirtualServer

6. Dies ist ein IPython-spezifisches Dienstprogramm. Sie können jetzt [tab] und sehen, welche Funktionen für das VirtualServer-Objekt verfügbar sind:

In [11]: vip_list = VirtualServer. <<< Press [tab] here
VirtualServer.create VirtualServer.getObjectDict
VirtualServer.delete VirtualServer.getRequestPostDataJson
VirtualServer.dump VirtualServer.getRequestPostDataXml
VirtualServer.get VirtualServer.mro
VirtualServer.getAll VirtualServer.searchByName
VirtualServer.getInfo VirtualServer.update

7. Erhalten Sie eine Liste der VIPs auf dem Gerät:

In [14]: vip_list = VirtualServer.getAll()
method=slb.virtual_server.getAll&session_id=19b69d604c5bf0b27d79595b1b50e3&format=json
https://192.168.148.161:443/services/rest/V2/
{"virtual_server_list":[{"name":"vip1","address":"1.1.1.1","status":1,"arp_status":1,"stats_data":1,"extended_stats":0,"disable_vserver_on_condition":0,"redistribution_flagged":0,"ha_group":{"status":0},"vip_template":"default","pbslb_template":"","vport_list":[{"protocol":11,"port":20480,"name":"_1.1.1.1_HTTP_80","service_group":"","connection_limit":{"status":0,"connection_limit":8000000,"connection_limit_action":0,"connection_limit_log":0},"default_selection":1,"received_hop":0,"status":1,"stats_data":1,"extended_stats":0,"snat_against_vip":0,"vport_template":"default","aflex_list":[],"send_reset":0,"sync_cookie":{"sync_cookie":0,"sack":0},"source_nat":"","http_template":"","ram_cache_template":"","tcp_proxy_template":"","server_ssl_template":"","conn_reuse_template":"","source_ip_persistence_template":"","pbslb_template":"","acl_natpool_binding_list":[]}]}]}

In [15]: for vip in vip_list:
....: print vip
....:
VirtualServer(name = 'vip1', address = '1.1.1.1', status = 1)

In [16]:

8. Erstellen Sie ein neues VIP:

In [16]: vip_new = VirtualServer(name="vip2", address="2.2.2.2")

In [17]: vip_new.create()
{"virtual_server": {"name": "vip2", "address": "2.2.2.2"}}
https://192.168.148.161:443/services/rest/V2/?method=slb.virtual_server.create&session_id=19b69d604c5bf0b27d79595b1b50e3&format=json
{"response": {"status": "OK"}}
Out[17]: 0

In [18]:

9. Überprüfen:

In [19]: vip_list = VirtualServer.getAll()
method=slb.virtual_server.getAll&session_id=19b69d604c5bf0b27d79595b1b50e3&format=json
https://192.168.148.161:443/services/rest/V2/
{"virtual_server_list":[{"name":"vip1","address":"1.1.1.1","status":1,"arp_status":1,"stats_data":1,"extended_stats":0,"disable_vserver_on_condition":0,"redistribution_flagged":0,"ha_group":{"status":0},"vip_template":"default","pbslb_template":"","vport_list":[{"protocol":11,"port":20480,"name":"_1.1.1.1_HTTP_80","service_group":"","connection_limit":{"status":0,"connection_limit":8000000,"connection_limit_action":0,"connection_limit_log":0},"default_selection":1,"received_hop":0,"status":1,"stats_data":1,"extended_stats":0,"snat_against_vip":0,"vport_template":"default","aflex_list":[],"send_reset":0,"sync_cookie":{"sync_cookie":0,"sack":0},"source_nat":"","http_template":"","ram_cache_template":"","tcp_proxy_template":"","server_ssl_template":"","conn_reuse_template":"","source_ip_persistence_template":"","pbslb_template":"","acl_natpool_binding_list":[]}]},{"name":"vip2","address":"2.2.2.2","status":1,"arp_status":1,"stats_data":1,"extended_stats":0,"disable_vserver_on_condition":0,"redistribution_flagged":0,"ha_group":{"status":0},"vip_template":"default","pbslb_template":"","vport_list":[]}]}

In [20]: for vip in vip_list:
....: print vip
....:
VirtualServer(name = 'vip1', address = '1.1.1.1', status = 1)
VirtualServer(name = 'vip2', address = '2.2.2.2', status = 1)

10. Löschen Sie das neue VIP:

In [21]: vip_del = VirtualServer(name='vip2')

In [22]: vip_del.
vip_del.create vip_del.getAll vip_del.getRequestPostDataXml
vip_del.delete vip_del.getInfo vip_del.name
vip_del.dump vip_del.getObjectDict vip_del.searchByName
vip_del.get vip_del.getRequestPostDataJson vip_del.update

In [23]: vip_del.delete()
session_id=19b69d604c5bf0b27d79595b1b50e3&method=slb.virtual_server.delete&name=vip2&format=json
https://192.168.148.161:443/services/rest/V2/
{"response": {"status": "OK"}}
Out[23]: 0

11. Überprüfen:

In [24]: for vip in VirtualServer.getAll():
....: print vip
....:
method=slb.virtual_server.getAll&session_id=19b69d604c5bf0b27d79595b1b50e3&format=json
https://192.168.148.161:443/services/rest/V2/
{"virtual_server_list":[{"name":"vip1","address":"1.1.1.1","status":1,"arp_status":1,"stats_data":1,"extended_stats":0,"disable_vserver_on_condition":0,"redistribution_flagged":0,"ha_group":{"status":0},"vip_template":"default","pbslb_template":"","vport_list":[{"protocol":11,"port":20480,"name":"_1.1.1.1_HTTP_80","service_group":"","connection_limit":{"status":0,"connection_limit":8000000,"connection_limit_action":0,"connection_limit_log":0},"default_selection":1,"received_hop":0,"status":1,"stats_data":1,"extended_stats":0,"snat_against_vip":0,"vport_template":"default","aflex_list":[],"send_reset":0,"sync_cookie":{"sync_cookie":0,"sack":0},"source_nat":"","http_template":"","ram_cache_template":"","tcp_proxy_template":"","server_ssl_template":"","conn_reuse_template":"","source_ip_persistence_template":"","pbslb_template":"","acl_natpool_binding_list":[]}]}]}
VirtualServer(name = 'vip1', address = '1.1.1.1', status = 1)

In [25]:

Da haben Sie es, A10 AX Python SDK in Aktion. Schön und einfach. Wenn die Methode im SDK verfügbar ist, warum das Rad neu erfinden? Selbst wenn sie nicht vorhanden ist, können Sie jederzeit Ihre eigene Methode auf der Grundlage des SDK schreiben.

Hinterlassen Sie mir einen Kommentar und lassen Sie mich wissen, ob es weitere Beispiele gibt, die Sie gerne sehen würden.

Zum Wohl!



Paul Nicholson
|
Juli 5, 2016

Paul Nicholson verfügt über 24 Jahre Erfahrung in der Arbeit mit Internet- und Sicherheitsunternehmen in den USA und Großbritannien. In seiner jetzigen Position ist Nicholson verantwortlich für die globale... Mehr lesen