aXAPI mit Python
A10 bietet eine aXAPI-Schnittstelle, die REST-Webservice-Aufrufe verwendet, um Konfigurationsänderungen vorzunehmen. Hier finden Sie einen kurzen Überblick über die Funktionsweise.
- Abrufen einer Sitzungs-ID über einen HTTPS-Aufruf mit Benutzernamen und Passwort.
- Bauen Sie Ihren HTTPS-Postkörper in dem im Leitfaden angegebenen Format auf (XML oder JSon).
- Stellen Sie eine POST-Anfrage an das Gerät.
Hier ist der Code in Abschnitte unterteilt, die der Übersicht oben entsprechen:
Schritt 1. Ermitteln der Sitzungs-ID
#!/usr/bin/env python
#
# v1, September 27, 2013
# by Eric Chou
#
# Reference: AX_aXAPI_Ref_v2-20121010.pdf
#
import httplib, json, urllib, urllib2
# Gets the session ID to host 172.31.31.121 (Student 12)
c = httplib.HTTPSConnection(""172.31.31.121"")
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
Schritt 2. Konstruieren Sie den HTTP-Post-Body
###############################
# Step 1. Create Servers #
###############################
# Create slb servers s1 10.0.2.128
# Construct HTTP URL and Post Body
post_body = json.dumps(
{""server"":
{
""name"": ""s1"",
""host"": ""10.0.2.128"",
""health_monitor"": ""(default)"",
""port_list"": [
{""port_num"": 80,
""protocol"": 2,}
],
}
}
)
url = ""https: //172.31.31.121/services/rest/V2/?&session_id="" + session_id + ""&format=json&method=slb.server.create""
print ""URL Created. URL: "" + url + "" body: "" + post_body
(Wiederholen Sie den Vorgang für alle erforderlichen Konfigurationsaufgaben)
Schritt 3. Den Antrag stellen
# Making request
req = urllib2.Request(url, post_body)
rsp = urllib2.urlopen(req)
content = rsp.read()
print ""Result: "" + content
Das war's! Einfach, elegant und mit minimalem Aufwand wiederholbar 🙂 .
Hier ist die leere Konfiguration des Geräts vor dem Skript:
AX12#sh run | s slb<
AX12#
AX12#
Hier ist die Ausgabe nach der Ausführung:
>>>
Session Created. Session ID: 69be80219842402d45f0488c52b782
URL Created. URL: https ://172.31.31.121/services/rest/V2/?&session_id=69be80219842402d45f0488c52b782&format=json&method=slb.server.create body: {""server"": {""host"": ""10.0.2.128"", ""name"": ""s1"", ""port_list"": [{""protocol"": 2, ""port_num"": 80}], ""health_monitor"": ""(default)""}}
Result: {""response"": {""status"": ""OK""}}
URL Created. URL: https ://172.31.31.121/services/rest/V2/?&session_id=69be80219842402d45f0488c52b782&format=json&method=slb.server.create body: {""server"": {""host"": ""10.0.2.129"", ""name"": ""s2"", ""port_list"": [{""protocol"": 2, ""port_num"": 80}], ""health_monitor"": ""(default)""}}
Result: {""response"": {""status"": ""OK""}}
URL Created. URL: https ://172.31.31.121/services/rest/V2/?&session_id=69be80219842402d45f0488c52b782&format=json&method=slb.service_group.create body: {""service_group"": {""protocol"": 2, ""name"": ""http"", ""member_list"": [{""port"": 80, ""server"": ""s1""}, {""port"": 80, ""server"": ""s2""}], ""health_monitor"": ""ping""}}
Result: {""response"": {""status"": ""OK""}}
URL Created. URL: https ://172.31.31.121/services/rest/V2/?&session_id=69be80219842402d45f0488c52b782&format=json&method=slb.virtual_server.create body: {""virtual_server"": {""subnet"": {""mask_len"": 24, ""address"": ""10.0.1.122""}, ""vport_list"": [{""service_group"": ""http"", ""protocol"": 2, ""port"": 80}], ""name"": ""vip1""}}
Result: {""response"": {""status"": ""OK""}}
>>>
Gerätekonfiguration nach
AX12#sh run | s slb
slb server s1 10.0.2.128
conn-limit 8000000 no-logging
port 80 tcp
slb server s2 10.0.2.129
conn-limit 8000000 no-logging
port 80 tcp
slb service-group http tcp
health-check ping
member s1:80
member s2:80
slb virtual-server vip1 10.0.1.122 /24
port 80 tcp
service-group http
AX12#
Und jetzt kann ich die fantastische Webseite sehen, indem ich eine Anfrage an den von s1 bedienten VIP stelle:
aXAPI ist ziemlich cool. Ich werde wahrscheinlich mehr damit spielen und meine Fortschritte hier posten.
Viel Spaß beim Coding! Hinterlassen Sie mir einen Kommentar, wie Sie aXAPI-Integrationsskripte gerne sehen würden 🙂 .
Hier ist das vollständige Skript:
#!/usr/bin/env python
#
# v1, September 27, 2013
# by Eric Chou
#
# Reference: AX_aXAPI_Ref_v2-20121010.pdf
#
import httplib, json, urllib, urllib2
# Gets the session ID to host 172.31.31.121 (Student 12)
c = httplib.HTTPSConnection(""172.31.31.121"")
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
###############################
# Step 1. Create Servers #
###############################
# Create slb servers s1 10.0.2.128
# Construct HTTP URL and Post Body
post_body = json.dumps(
{""server"":
{
""name"": ""s1"",
""host"": ""10.0.2.128"",
""health_monitor"": ""(default)"",
""port_list"": [
{""port_num"": 80,
""protocol"": 2,}
],
}
}
)
url = ""https ://172.31.31.121/services/rest/V2/?&session_id="" + session_id + ""&format=json&method=slb.server.create""
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
# Create slb server s2 10.0.2.129
post_body = json.dumps(
{""server"":
{
""name"": ""s2"",
""host"": ""10.0.2.129"",
""health_monitor"": ""(default)"",
""port_list"": [
{""port_num"": 80,
""protocol"": 2,}
],
}
}
)
url = ""https ://172.31.31.121/services/rest/V2/?&session_id="" + session_id + ""&format=json&method=slb.server.create""
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
####################################
# Step 2. Create Service Group #
####################################
# Create service group http with member server s1 and s2
post_body = json.dumps(
{""service_group"":
{
""name"": ""http"",
""protocol"": 2,
""health_monitor"": ""ping"",
""member_list"": [
{""server"": ""s1"",
""port"": 80,},
{""server"": ""s2"",
""port"": 80,},
],
}
}
)
url = ""https ://172.31.31.121/services/rest/V2/?&session_id="" + session_id + ""&format=json&method=slb.service_group.create""
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
#####################################
# Step 3. Create Virtual Server #
#####################################
# Create virtual server
post_body = json.dumps(
{""virtual_server"":
{
""name"": ""vip1"",
""subnet"":
{
""address"": ""10.0.1.122"",
""mask_len"": 24,
},
""vport_list"": [
{""protocol"": 2,
""port"": 80,
""service_group"": ""http"",
},
],
}
}
)
url = ""https ://172.31.31.121/services/rest/V2/?&session_id="" + session_id + ""&format=json&method=slb.virtual_server.create""
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