Zum Inhalt springen Weiter zur Suche
Testversion
Blog

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:

  1. Anmeldung bei Systemen über das Netz
  2. Systeme löschen und auf die Werkseinstellungen zurücksetzen, während Sie angemeldet sind
  3. Sicherung und Wiederherstellung von Systemdaten und Images
  4. Aktualisierung von Netzwerkparametern wie IP- und DNS-Adressen und Routing
  5. 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.

HINWEIS: Wenn ein Löschvorgang per Skript ausgeführt wird, muss das Skript eine Pause einlegen und warten, bis der Neustart abgeschlossen und das System bereit ist. Siehe das Skript "Warten auf Systembereitschaft" unten.

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
HINWEIS: Beachten Sie, dass die Netzwerkschnittstellen aktiviert und konfiguriert werden müssen, wenn die Anzahl der Schnittstellen auf dem Zielsystem und in der Sicherungspaketdatei nicht übereinstimmt.

System neu starten

Senden Sie die Anweisung zum Neustart des Systems.

HINWEIS: Nach einer Wiederherstellung ist ein Neustart des Systems erforderlich.

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