Zum Inhalt springen Weiter zur Suche
Testversion
Blog

aXAPI cli.deploy und cli.show_info mit Python

Der Code in diesem Blog kann auf meinem Github-Konto heruntergeladen werden.

In meinem letzten Beitrag, A10 Networks aXAPI mit Python, wurden Beispiele für die Verwendung von Python mit bestehenden aXAPI-Methoden wie slb.server.create, slb.service_group.create und slb.virtual_server.create gegeben. Es ist effizient, sauber und schnell.

Aber es gibt Zeiten, in denen Sie nur eine schnelle Abfrage machen müssen, die gewünschte Prozedur nicht von einer bestehenden Methode unterstützt wird oder Sie einfach keine Zeit haben, die gesamte Dokumentation durchzusehen. Was tun Sie dann? Geben Sie cli.deploy und cli.show_info ein.

cli.deploy und cli.show_info können als "catch all"-Methoden betrachtet werden, die es Ihnen ermöglichen, Geräte zu konfigurieren oder Befehle zu zeigen, als ob Sie vor dem Terminal säßen. Die Prozeduren sind die gleichen, aber der Körper Ihres HTTP-Posts würde nur die Befehle enthalten, die Sie eingeben wollen.

  • cli.deploy
In diesem Beispiel schreibe ich einfach eine Textdatei mit dem Namen cliDeployCommands.txt, in der die Befehle aufgeführt sind, die ich eingeben möchte:
A10_aXAPI$ cat cliDeployCommands.txt
slb server s1 10.0.2.128
port 80 tcp
slb server s2 10.0.2.129
port 80 tcp
wr mem
A10_aXAPI$

Führen Sie dann das Skript aus. Das Skript ist praktisch identisch mit dem letzten Beitrag, mit Ausnahme des HTTP-POST-Bodys. Sie können das Skript über den GitHub-Link oben herunterladen, es ist auch am Ende dieses Beitrags eingefügt.

A10_aXAPI$ python axapi_cli_deploy.py -d 192.168.1.200 -c cliDeployCommands.txt
Session Created. Session ID: 958b183474deaa0914176da4121ca8
URL Created. URL: https ://192.168.1.200/services/rest/V2/?&session_id=958b183474deaa0914176da4121ca8&format=json&method=cli.deploy&username=admin&password&a10&enable_password=”&grab_config=1 body: slb server s1 10.0.2.128
port 80 tcp
slb server s2 10.0.2.129
port 80 tcp
wr mem

Result: slb server s1 10.0.2.128
SoftAX(config-real server)#port 80 tcp
SoftAX(config-real server-node port)#slb server s2 10.0.2.129
SoftAX(config-real server)#port 80 tcp
SoftAX(config-real server-node port)#wr mem
Building configuration…
Write configuration to primary default startup-config
[OK]
SoftAX(config-real server-node port)#
A10_aXAPI$
  • cli.show_info

In diesem Beispiel tue ich das Gleiche. Erstellen Sie eine Textdatei mit dem Namen "showInfoCommands.txt":

A10_aXAPI$ cat showInfoCommands.txt
show version
show interface brief
A10_aXAPI$

Und führen Sie das Skript entsprechend aus:


A10_aXAPI$ python axapi_cli_showInfo.py -d 192.168.1.200 -c showInfoCommands.txt
Session Created. Session ID: 9835d3e172e2cc25d1499a8b081b91
URL Created. URL: https ://192.168.1.200/services/rest/V2/?&session_id=9835d3e172e2cc25d1499a8b081b91&format=json&method=cli.show_info body: show version
show interface brief

Result: show version
AX Series Advanced Traffic Manager AXSoftAX
Copyright 2007-2013 by A10 Networks, Inc. All A10 Networks products are
protected by one or more of the following US patents and patents pending:
7716378, 7675854, 7647635, 7552126, 20090049537, 20080229418, 20080040789,
20070283429, 20070271598, 20070180101

64-bit Advanced Core OS (ACOS) version 2.7.1-P2, build 57 (Aug-02-2013,12:17)
Booted from Hard Disk primary image
Licenses: Bandwidth
Serial Number: SoftAX1000004380
aFleX version: 2.0.0
aXAPI version: 2.1
Hard Disk primary image (default) version 2.7.1-P2, build 57
Hard Disk secondary image version 2.6.1-GR1-P10, build 46
Last configuration saved at Oct-11-2013, 02:29
Virtualization type: VMware
Hardware: 1 CPUs(Stepping 11), Single 9G Hard disk
Memory 2061 Mbyte, Free Memory 855 Mbyte
Hardware Manufacturing Code: N/A
Current time is Oct-11-2013, 02:36
The system has been up 2 days, 12 hours, 10 minutes
SoftAX#show interface brief
Port Link Dupl Speed Trunk Vlan MAC IP Address IPs Name
————————————————————————————
mgmt Up Full 1000 N/A N/A 000c.29be.5b4c 192.168.1.200/24 1
1 Disb None None None 1 000c.29be.5b56 0.0.0.0/0 0
2 Disb None None None 1 000c.29be.5b60 0.0.0.0/0 0
3 Disb None None None 1 000c.29be.5b6a 0.0.0.0/0 0
SoftAX#
A10_aXAPI$

Auch hier kann das vollständige Skript am Ende dieses Beitrags eingesehen oder über den oben genannten GitHub-Link heruntergeladen werden.

Warum sollten wir also nicht immer cli.deploy und cli.show_info verwenden? Würden wir nicht einfach etwas verwenden wollen, das "immer funktioniert", anstatt jedes Mal nach einer bestimmten Methode zu suchen? Ich denke, die Antwort lautet "vielleicht". Es gibt einige Argumente, die dafür sprechen, cli.deploy und cli.show_info NICHT als einzige Quelle für ein Werkzeug zu verwenden:

  1. Für cli.deploy gibt es eine begrenzte Anzahl von Pufferbefehlen, die Sie auf einmal senden können. Ich bin noch nicht damit konfrontiert worden und ich denke, dass es für die meisten Situationen ausreicht, aber es gibt eine Grenze.
  2. Für cli.deploy müssen Sie die Syntax der Konfiguration und die Reihenfolge der Operationen kennen. Sie ist für Netzwerktechniker gedacht und für Entwickler wohl nicht intuitiv.
  3. Für cli.show_info erhalten Sie das gleiche Ergebnis wie bei einer Remote-Sitzung. Sie müssen Ihren eigenen Screen Scraping und Text Parsing, nicht anders als, sagen wir, ein Expect-Skript zu tun. Das ist RIESIG für mich, ich hasse Screen Scraping wirklich.

Zusammenfassend lässt sich sagen, dass sie beide ihren Platz in der Werkzeugtasche haben. Ist es nicht schön, dass A10 beide Optionen anbietet?

Hinterlassen Sie mir Kommentare, wie ich mein Skript verbessern kann, und Ideen für zukünftige Beiträge. Ich bin Ihnen sehr dankbar dafür.

Die Skripte können hier heruntergeladen werden.

cli.deploy-Skript:

A10_aXAPI$ cat axapi_cli_deploy.py
#!/usr/bin/env python

#
# v1, September 30, 2013
# by Eric Chou
#
# Reference: AX_aXAPI_Ref_v2-20121010.pdf
#

import httplib, json, urllib, urllib2, optparse

# specify device and command
parser = optparse.OptionParser()
parser.add_option(‘-d’, ‘–device’, dest=”device”, action=”store”)
parser.add_option(‘-c’, ‘–command’, dest=”commandFile”, action=”store”)
options, args = parser.parse_args()
device = options.device
commandFile = options.commandFile
# Gets the session ID
c = httplib.HTTPSConnection(device)
c.request(“GET”, “/services/rest/V2/?method=authenticate&username=admin&password=a10&format=json”)
response = c.getresponse()
data = json.loads(response.read())
session_id = data['session_id']
print “Session Created. Session ID: ” + session_id

# Construct HTTP URL and Post Body
post_body = open(commandFile, ‘r’).read()
url = “https://” + device + “/services/rest/V2/?&session_id=” + session_id +
“&format=json&method=cli.deploy&username=admin&password&a10&enable_password=”&grab_config=1″
print “URL Created. URL: ” + url + ” body: ” + post_body

# Making request
req = urllib2.Request(url, post_body)
rsp = urllib2.urlopen(req)
content = rsp.read()
print “Result: ” + content

A10_aXAPI$

cli.show_info script:

A10_aXAPI$ cat axapi_cli_showInfo.py
#!/usr/bin/env python

#
# v2, October 10, 2013
# by Eric Chou
#
# Reference: AX_aXAPI_Ref_v2-20121010.pdf
#

import httplib, json, urllib, urllib2, optparse

# specify device and command
parser = optparse.OptionParser()
parser.add_option(‘-d’, ‘–device’, dest=”device”, action=”store”)
parser.add_option(‘-c’, ‘–command’, dest=”commandFile”, action=”store”)
options, args = parser.parse_args()
device = options.device
commandFile = options.commandFile
# Gets the session ID to
c = httplib.HTTPSConnection(device)
c.request(“GET”, “/services/rest/V2/?method=authenticate&username=admin&password=a10&format=json”)
response = c.getresponse()
data = json.loads(response.read())
session_id = data['session_id']
print “Session Created. Session ID: ” + session_id

# Construct HTTP URL and Post Body
post_body = open(commandFile, ‘r’).read()
url = “https://” + device + “/services/rest/V2/?&session_id=” + session_id + “&format=json&method=cli.show_info”
print “URL Created. URL: ” + url + ” body: ” + post_body

# Making request
req = urllib2.Request(url, post_body)
rsp = urllib2.urlopen(req)
content = rsp.read()
print “Result: ” + content
A10_aXAPI$


Paul Nicholson
|
Oktober 11, 2013

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