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_INPUTzu
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 sicherWenn 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-rcGeben 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"'" } } } }' | echoDie 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-T4XVLncngUg7pzqJ0AHzmZB4OMXeB5dlFqDpPlEDieser 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 ausUm 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/identityUnd 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“.