Verwaltung eines Projekts über eine API mit dem Kommandozeilen-Programm cURL unter Linux OS

Betrachten Sie den Prozess bei der Arbeit mit der API. Er umfasst die folgenden Punkte:

Authentifizierung mit einer RC-Datei

Um eine Token-ID zu erhalten und mit der API fortzufahren, müssen Sie in SIM-Cloud authentifiziert sein. Um die erforderlichen Umgebungsvariablen des Betriebssystems einzurichten, wird eine speziell erstellte RC-Datei verwendet.

  • Erstellen Sie eine Datei namens ‘api-rc’ mit folgendem Inhalt:
unset OS_TOKEN
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_USERNAME={Ваш логин для доступа к услуге}
# Get the password.
echo "Please enter your OpenStack Password for project $OS_PROJECT_NAME as user $OS_USERNAME: "
read -sr OS_PASSWORD_INPUT
export OS_PASSWORD=$OS_PASSWORD_INPUT
export OS_PROJECT_NAME={Имя Вашего проекта}
export OS_IDENTITY_API_VERSION=3
export PS1='[\u@\h (SIM-CLOUD API)]\$ '
export OS_API="https://api.sim-cloud.net"
export OS_AUTH_URL=$OS_API":5000/v3"

Hinweis

Wenn die Variablen aus der RC-Datei exportiert werden, wird in einer einmaligen Aufforderung das Passwort für das Cloud-basierte Projekt abgefragt.
Wenn Sie die Passwortabfrage unterdrücken und das Passwort automatisch eingeben lassen wollen, öffnen Sie die RC-Datei mit einem beliebigen Texteditor und ändern Sie den folgenden Textblock:
# Get the password.
echo "Please enter your OpenStack Password for project $OS_PROJECT_NAME as user $OS_USERNAME: "
read -sr OS_PASSWORD_INPUT
export OS_PASSWORD=$OS_PASSWORD_INPUT

zu

export OS_PASSWORD={Ihr Passwort für den Zugriff auf den Dienst}

Warnung

Da es sich bei der RC-Datei um eine gewöhnliche Textdatei handelt und Ihr Kennwort somit in unverschlüsselter Form vorliegt, ist diese Vorgehensweise nicht sicher
Wenn Sie diesen Schritt durchführen, sollten Sie im System Regeln für die Mindestanforderungen an die Nutzung des Systems einrichten.

Abrufen der Token-ID

  • Öffnen Sie die Bash-Konsole, wechseln Sie in den Katalog, der Ihre RC-Datei enthält, und exportieren Sie die Variablen aus der RC-Datei in die Systemumgebung mit Hilfe des Befehls ‘.’ (Punkt) oder ‘source’.

    source api-rc
    

    Geben Sie ggf. Ihr Passwort für Ihr Projekt in der SIM-Cloud ein.

  • Sie können die Token-ID mit dem folgenden Befehl abrufen:

curl -v \
    -s \
    -X POST $OS_AUTH_URL/auth/tokens?nocatalog \
    -H "Content-Type: application/json" \
    -d '
    { "auth": {
        "identity": {
            "methods": ["password"],
            "password": {
                "user": {
                    "domain": {
                        "name": "'"$OS_USER_DOMAIN_NAME"'"},
                        "name": "'"$OS_USERNAME"'",
                        "password": "'"$OS_PASSWORD"'"
                        }
                    }
                },
        "scope": {
            "project": {
                "domain": { "name": "'"$OS_PROJECT_DOMAIN_NAME"'" }, "name": "'"$OS_PROJECT_NAME"'"
                    }
                }
            }
    }' | echo

Die erhaltene Antwort enthält eine Zeile, die mit ‘< X-Subject-Token:’ beginnt. Die gesamte darauf folgende Zeichenfolge bildet die Token-ID, die beispielsweise in API-Anfragen verwendet wird:

< X-Subject-Token: gAAAAABbcWL17tiGivJp4oc8OGiZS0Sfgn_-ZrlNzocZwTo0nfwe3Y2EbUrI-k3JfSLrIksLAKt-iFGwIhn9-JoiEL4EpTgI4WxZZPzGubDSMgoO-3wRzAm64cVr91efQU_W4JYYjxwGCqL-T4XVLncngUg7pzqJ0AHzmZB4OMXeB5dlFqDpPlE

Dieser Wert muss anschließend der Variablen OS_TOKEN zugewiesen und in die Systemumgebung exportiert werden.

Dies alles kann mit einem einzigen Befehl erledigt werden:

export OS_TOKEN=`curl -s -i -H "Content-Type: application/json" -X POST $OS_AUTH_URL/auth/tokens -d '{"auth": {"identity": {"methods": ["password"], "password": {"user": {"name": "'"$OS_USERNAME"'", "domain": {"name": "default"}, "password": "'"$OS_PASSWORD"'" }}}}}' | awk '/X-Subject-Token/ {print $2}'`

Senden der API-Anfrage

Beim Senden einer API-Anforderung wird normalerweise eine Konstruktion des folgenden Typs verwendet:

curl -s -H "X-Auth-Token: $OS_TOKEN" -H "Content-Type: application/json" -X <METHOD> <URL> -d '{key: value}' | python -mjson.tool
wo
$OS_TOKEN - ist die Token-ID, die durch die Umgebungsvariable ersetzt wird
<METHOD> - ist die Art der Übermittlung der HTTP-Anfrage: GET, HEAD, POST oder PUT. Wenn dies nicht angegeben ist, verwenden Sie GET
<URL> - dies ist eine Zeile, die aus einer Kombination der Symbole des Zugangspunkts und Parametern aus der offiziellen Dokumentation der OpenStack-Suite besteht*
Nach „-d“ wird eine Struktur beschrieben, in der als „key:value“ die in der Abfrage zu übergebenden Parameter angegeben werden
« | python -mjson.tool» - dieser Code gibt die Antwortinformationen in einem lesbaren Format aus

Um zum Beispiel weiter an einem Projekt zu arbeiten, müssen wir seine ID kennen.

Verwenden Sie dazu die folgende Anfrage:

curl -s -H "X-Auth-Token: $OS_TOKEN" -H "Content-Type: application/json" https://api.sim-cloud.net:5000/v3/auth/projects | python -mjson.tool
wo
$OS_TOKEN - ist die Token-ID, die durch die Umgebungsvariable ersetzt wird
<METHOD> - die Standardmethode (GET) wird verwendet, so dass wir diesen Key nicht angeben
<URL> - Dies ist eine Zeile, die aus der Kombination der * URL des Zugangspunkts und Parametern aus der offiziellen Dokumentation besteht api-ref/identity

Und die folgenden Informationen werden empfangen:

{
    "links": {
        "next": null,
        "previous": null,
        "self": "https://api.sim-cloud.net:5000/v3/auth/projects"
    },
    "projects": [
        {
            "description": "",
            "domain_id": "b9091e0ccd2febc3464e4d83c04be17a",
            "enabled": true,
            "id": "b1a56f59f6f013a061074fdcc56daec0",
            "is_domain": false,
            "links": {
                "self": "https://api.sim-cloud.net:5000/v3/projects/b1a56f59f6f013a061074fdcc56daec0"
            },
            "name": "demo",
            "parent_id": "b9c04be1e0cc464e4091d83d2febc37a"
        }
    ]
}
Hier kann man folgendes erkennen:
Der Projektname ist ‘name’: demo
Die Projekt-ID - „id“: „b1a56f59f6f013a061074fdcc56daec0“

Umgang mit der Antwort

Wenn die Anfrage nicht erfolgreich war, wird der Fehlercode zusammen mit einer Fehlermeldung und einer kurzen Erklärung der Ursache ausgegeben:

{
    "error": {
        "code": 401,
        "message": "The request you have made requires authentication.",
        "title": "Unauthorized"
    }
}

Eine vollständige Liste der möglichen Antwortcodes und der empfohlenen Maßnahmen finden Sie in der Dokumentation zu jeder Anfrage unter „Status Codes“.