Allgemeine Verwaltungsaufgaben mit aXAPI
A10 Networks Produkte mit der Advanced Core Operating System (ACOS)-Technologie beinhalten eine umfassende API-Infrastruktur für Systemintegrationen und -verwaltung. Bei diesem API-Produkt handelt es sich um aXAPI, eine auf RESTful-Webservices basierende Schnittstelle, die DevOps und IT-Betrieb die Möglichkeit bietet, sich nahtlos in bestehende Verwaltungsplattformen zu integrieren.
aXAPI integriert sich in Management-Automatisierungssysteme wie Ansible, Chef, Puppet und Jenkins oder kann direkt mit selbst entwickelter Software verwendet werden. Für weitere Informationen lesen Sie den Artikel "aXAPI For Integration".
Dieser Artikel enthält direkte Programmierbeispiele für allgemeine Verwaltungsaufgaben:
- Anmeldung bei Systemen über das Netz
- Systeme löschen und auf die Werkseinstellungen zurücksetzen, während Sie angemeldet sind
- Sicherung und Wiederherstellung von Systemdaten und Images
- Aktualisierung von Netzwerkparametern wie IP- und DNS-Adressen und Routing
- Abfrage des Systemstatus für Boot- und Ladestatus
In den folgenden Beispielen werden der Einfachheit halber Linux cURL-Skripte verwendet. Diese funktionierenden Beispiele können dann auf jede Sprache oder Verwaltungsumgebung portiert werden.
Anmeldung
Der folgende Aufruf dient der Authentifizierung mit einem Benutzernamen und einem Passwort. Die API gibt dann Daten im JSON-Format zurück, einschließlich eines Tokens im Signaturfeld. Dieses Token muss an alle weiteren API-Aufrufe weitergegeben werden.
/usr/bin/curl -k -s "https://$HOSTIP/axapi/v3/auth" \
-H "Content-Type:application/json" \
-d '{
"credentials": {
"username": "admin",
"password": "a10"
}
}' > /tmp/out.json
sig=`cat /tmp/out.json | grep "\signature\""" | cut -f 2 -d ':' | sed 's/""//g' | sed 's/
if [ ""$sig"" == """" ];
then
echo ""ERROR - Failed to login to ACOS device - exiting""
exit
fi
Die zurückgegebene Token-Zeichenkette wird in die Variable $sig eingelesen, die in nachfolgenden API-Aufgaben verwendet werden kann.
System-Sicherung
Eine wichtige Funktion ist die Sicherung des Systems. Das folgende Beispiel weist das A10 System an, ein Paket mit dem Systemabbild und der Konfiguration zu erstellen und das Backup per FTP auf einen entfernten Server zu übertragen. Es können auch andere Protokolle verwendet werden, einschließlich HTTP SCP
curl -k -s -X POST \
""https://$HOSTIP/axapi/v3/backup/system"" \
-H ""Authorization: A10 $sig"" \
-H ""Content-Type:application/json"" \
-d ""{
\"system\": {
\"remote-file\":\"ftp://backup@server.where.com/$BKPATH/$BKFILE\"
\"password\":\"a102345\"
}
}"" > /tmp/out.backup.json
x=`cat /tmp/out.backup.json | grep ""\"status\": \"OK\"""`
if [ ""$x"" = """" ]
then
echo ""System Backup failed""
cat /tmp/out.backup.json
else
echo ""System Backup successful [$BKPATH/$BKFILE]""
fi
System löschen
Durch das Löschen wird die Systemkonfiguration auf die Werkseinstellungen zurückgesetzt. Wenn Sie ein System mit einem unbekannten Zustand neu einrichten, empfiehlt es sich, eine Löschung durchzuführen. Protokolle und andere Nutzungsdaten werden zusammen mit allen anderen Konfigurationen gelöscht.
echo ""Erase Configuration""
curl -k -s -X POST \
""https://$HOST/axapi/v3/erase"" \
-H ""Authorization: A10 $sig"" \
-H ""Content-Type:application/json"" \
-d '{
""erase"": {
""preserve-management"":0
""preserve-accounts"":1
""reload"":1
}
}' > /tmp/out.json
Die Option "preserve-managemen" ist nicht aktiviert, da sie standardmäßig auf DHCP gesetzt wird.
Die Option "Neu laden" ist aktiviert und löst einen Neustart des Systems aus.
System wiederherstellen
Im Folgenden wird eine Paket-Backup-Datei auf das A10-System heruntergeladen und das Image und die Konfigurationen wiederhergestellt.
curl -k -s -X POST \
""https://$HOSTIP/axapi/v3/restore"" \
-H ""Authorization: A10 $sig"" \
-H ""Content-Type:application/json"" \
-d ""{
\"restore\": {
\"remote-file\":\"ftp://root:12345@server.where.com/$BKPATH/$BKFILE\"
}
}"" > /tmp/out.restore.json
x=`cat /tmp/out.restore.json`
if [ ""$x"" == """" ]
then
echo ""System Restore successful [$BKPATH/$BKFILE]""
echo ""Need to reboot system to complete restore""
else
echo ""ERROR - System Restore failed [$BKPATH/$BKFILE]""
cat /tmp/out.restore.json
fi
System neu starten
Senden Sie die Anweisung zum Neustart des Systems.
curl -k -s -X POST \
""https://$HOSTIP/axapi/v3/reboot"" \
-H ""Authorization: A10 $sig"" \
-H ""Content-Type:application/json"" \
-d ""{
\"reboot\": {
\"all\":\"0\"
}
}"" > /tmp/out.reboot.json
#x=`cat /tmp/out.reboot.json | grep ""\"status\": \"OK\"""`
x=`cat /tmp/out.reboot.json`
if [ ""$x"" == """" ]
then
echo ""System Reboot sucessful""
else
echo ""System Reboot failed""
cat /tmp/out.reboot.json
fi
Warten auf Systembereitschaft
Bei der Automatisierung von Verwaltungsaufgaben, die einen Neustart erfordern, muss das System abgefragt werden, ob der Bootvorgang abgeschlossen ist und ob es sich in einem betriebsbereiten Zustand befindet. Das folgende Skript wird normalerweise nach einem Neustart ausgeführt. Sobald dieses Skript abgeschlossen ist, gibt es die Wartezustände frei und übergibt die Kontrolle an den nächsten Befehl.
#/usr/bin/bash
HOST=""$1""
echo ""Remote host [$HOST]""
echo ""Polling the system for both booted and ready condition""
sleep 5
while [ 1 ]
do
##echo ""Login to Thunder""
curl -k -s ""https://$HOST/axapi/v3/auth"" \
-H ""Content-Type:application/json"" \
-d '{
""credentials"": {
""username"": ""admin""
""password"": ""a10""
}
}' > /tmp/out.json
x=`cat /tmp/out.json | grep ""\"signature\""" | cut -f 2 -d ':' | sed 's/""//g' | sed 's///g'`
if [ ""$x"" = """" ]
then
echo ""System not available - waiting...""
sleep 10
else
echo ""System booted""
break
fi
done
while [ 1 ]
do
##echo ""Login to Thunder""
curl -k -s ""https://$HOST/axapi/v3/auth"" \
-H ""Content-Type:application/json"" \
-d '{
""credentials"": {
""username"": ""admin""
""password"": ""a10""
}
}' > /tmp/out.json
x=`cat /tmp/out.json | grep ""\"signature\""" | cut -f 2 -d ':' | sed 's/""//g' | sed 's///g'`
curl -k -s \
""https://$HOST/axapi/v3/running-config"" \
-H ""Authorization: A10 $x"" \
-H ""Content-Type:application/json"" \
-d '{
""running-config"": {
""aflex"": 0
""class-list"": 0
}
}' > /tmp/out.json
out=`cat /tmp/out.json | grep ""running-config"" `
if [ ""$out"" = """" ]
then
echo ""Still loading - waiting...""
sleep 10
else
echo ""System loaded""
sleep 5
break
fi
done
exit
DNS konfigurieren
Die folgenden API-Aufrufe legen die primäre DNS-IP-Adresse und das DNS-Suffix des Systems fest.
echo ""Set Primary DNS Primary IP""
curl -s -k -X POST \
""https://$HOST/axapi/v3/ip/dns/primary"" \
-H ""Authorization: A10 $sig"" \
-H ""Content-Type:application/json"" \
-d ""{
\"primary\":
\"ip-v4-addr\": ""\"$DNSIP\"""
}
}"" > /tmp/out.set_dns_primary.json
echo ""Set DNS Suffix""
curl -s -k -X POST \
""https://$HOST/axapi/v3/ip/dns/suffix"" \
-H ""Authorization: A10 $sig"" \
-H ""Content-Type:application/json"" \
-d '{
""suffix"": {
""domain-name"": ""what.com""
}
}' > /tmp/out.set_dns_suffix.json