OpenStack APIs

Um für den Zugriff auf OpenStack Dienste zu Authentifizieren und ein Token zu erhalten, müssen Sie zuerst eine Authentifizierungsanfrage mit den Berechtigungsdaten an den OpenStack Identitätsdienst stellen.

Anmeldeinformationen sind in der Regel eine Kombination aus Ihrem Benutzernamen und Passwort, und optional der Name oder die ID des Projekts Ihrer Cloud. Fragen Sie Ihren Cloud-Administrator nach Ihrem Benutzernamen, Passwort und Projekt, damit Sie Authentifizierungs-Token generieren können. Alternativ können Sie ein Token und nicht einen Benutzernamen und ein Passwort eingeben.

Wenn Sie eine API Anfrage senden, beinhaltet diese den Token im X-Auth-Token Header. Wenn Sie auf mehrere OpenStack Dienste zugreifen, müssen Sie einen Token für jeden Dienst haben. Ein Token ist nur für eine begrenzte Zeit gültig, bis dieser abläuft. Ein Token kann auch aus anderen Gründen ungültig werden. Zum Beispiel werden vorhandene Token eines Benutzers ungültig, wenn sich die Rollen des Benutzers verändern.

Authentifizierung und Ablauf der API Anfragen

  1. Fragen Sie einen Authentifizierungstoken vom Identitätsendpunkt an, welcher Ihnen von Ihrem Cloud Administrator geben wurde. Senden Sie den Berechtigungsnachweis bei der Anfrage mit wie in Authentifizieren beschrieben. Wenn die Anfrage erfolgreich ist, erhalten Sie ein Authentifizierungstoken.

  2. Senden Sie API Anfragen und fügen Sie das Token im X-Auth-Token Header ein. Fahren Sie fort API Anfragen mit diesem Token zu senden, bis die Aufgabe erledigt ist oder ein 401 Unauthorized Fehler auftritt.

  3. Wenn der 401 Unauthorized Fehler auftritt, fordern sie einen neuen Token an.

Die Beispiele in diesem Abschnitt verwenden cURL Kommandos. Für Informationen über cURL, siehe http://curl.haxx.se/. Für Informationen über die OpenStack APIs, siehe Aktuelle API-Versionen.

Authentifizieren

Der Berechtigungsnachweis als Nutzdaten für die Authentifzierung hat folgende Parameter:

Parameter für Zugangsdaten

Parameter

Typ

Beschreibung

User Domain (erforderlich)

Zeichenkette

Die Domäne des Benutzers.

Benutzername (erforderlich)

Zeichenkette

Der Benutzername. Wenn Sie keinen Benutzernamen und Passwort angeben, müssen Sie ein Token verwenden.

Passwort (erforderlich)

Zeichenkette

Das Passwort des Benutzers.

Project Domain (optional)

Zeichenkette

Die Domäne des Projekts. Dies ist ein erforderlicher Teil des Objektbereichs.

Project Name (optional)

Zeichenkette

Der Projektname. Project ID und Project Name sind beides optional.

Project ID (optional)

Zeichenkette

Die Projekt-ID. Sowohl die * Projekt-ID * als auch * Project Name * sind optional. Aber einer von ihnen ist zusammen mit der Project Domain erforderlich. Sie werden unter einem Objektbereich verpackt. Wenn Sie den Projektnamen oder die ID nicht kennen, senden Sie eine Anfrage ohne Objektbereich.

In einer typischen OpenStack-Installation mit Identity können Sie Ihren Projektnamen, Benutzernamen und Passwort zum Authentifizieren angeben.

Als Erstes, exportieren Ihres Projektnamens mit der Umgebungsvariable OS_PROJECT_NAME, Ihres Projektdomänennamen mit der Umgebungsvariable OS_PROJECT_DOMAIN_NAME, Ihren Benutzernamen mit der Umgebungsvariable OS_USERNAME, Ihr Passwort mit der Umgebungsvariable OS_PASSWORD und Ihren Benutzerdomänennamen mit der Umgebungsvariable OS_USER_DOMAIN_NAME.

Das Beispiel unten benutzt einen Endpunkt beschrieben im Installationshandbuch aus der Ocata-Installation. Sie können auch immer $OS_AUTH_URL als Umgebungsvariable benutzen.

Als nächstes starten Sie dieses cURL Kommando, um einen Token anzufordern:

$ 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"'" } } }}' \
| python -m json.tool

War die Anfrage erfolgreich, wird Created (201) zurückgegeben zusammen mit dem Token als Wert im X-Subject-Token Rückgabe-Kopf. Der Kopf ist gefolgt von einem Rückgabekörper, welches ein Objekt mit dem Typ token enthält, welches ein Ablaufdatum in der Form``“expires_at“:“datetime“`` zusammen mit anderen Attributen besitzt.

Das folgenden Beispiel zeigt eine erfolgreiche Antwort:

*   Trying 192.168.56.101...
* Connected to controller (192.168.56.101) port 5000 (#0)
> POST /v3/auth/tokens?nocatalog HTTP/1.1
> Host: controller:5000
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Type: application/json
> Content-Length: 226
>
} [226 bytes data]
* upload completely sent off: 226 out of 226 bytes
< HTTP/1.1 201 Created
< Date: Fri, 26 May 2017 06:48:58 GMT
< Server: Apache/2.4.18 (Ubuntu)
< X-Subject-Token: gAAAAABZJ8_a7aiq1SnOhbNw8vFb5WZChcvWdzzUAFzhiB99BHrjdSGai--_-JstU3WazsFXmRHNbD07qOQKTp5Sen2R_b9csaDkU49VXqSaJ0jh2nAlwJkys8aazz2oa3xSeUVe3Ndv_HRiW23-iWTr6jquK_AXdhRX7nvM4lmVTrxXFpelnJQ
< Vary: X-Auth-Token
< X-Distribution: Ubuntu
< x-openstack-request-id: req-0e9239ec-104b-40e0-a337-dca91fb24387
< Content-Length: 521
< Content-Type: application/json
<
{ [521 bytes data]
* Connection #0 to host controller left intact
{
    "token": {
        "audit_ids": [
            "HOGlhnMFT52xY7PjbuJZlA"
        ],
        "expires_at": "2017-05-26T07:48:58.000000Z",
        "is_domain": false,
        "issued_at": "2017-05-26T06:48:58.000000Z",
        "methods": [
            "password"
        ],
        "project": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "05ef0bf2a79c42b2b8155873b6404061",
            "name": "demo"
        },
        "roles": [
            {
                "id": "b18239b7026042ef8695c3c4cf10607b",
                "name": "user"
            }
        ],
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "12846256e60c42f88d0e1ba9711a57f5",
            "name": "demo",
            "password_expires_at": null
        }
    }
}

Bemerkung

In der vorigen Anfrage wird die Abfrage nocatalog benutzt, weil sie nur den Token und nicht den ganzen Dienstekatalog (sofern für den Benutzer verfügbar) ausgegeben haben wollen. Wenn der Benutzer den ganzen Dienstekatalog erhalten will, muss die Abfrage am Ende der URL weggelassen werden.

API Anfragen senden

Diese Sektion zeigt wie man einfache Compute API Aufrufe tätigt. Für die komplette Liste der Compute API Aufrufe lesen Sie Compute API.

Exportieren Sie die Token ID in die OS_TOKEN Umgebungsvariable. Zum Beispiel:

export OS_TOKEN=gAAAAABZJ8_a7aiq1SnOhbNw8vFb5WZChcvWdzzUAFzhiB99BHrjdSGai--_-JstU3WazsFXmRHNbD07qOQKTp5Sen2R_b9csaDkU49VXqSaJ0jh2nAlwJkys8aazz2oa3xSeUVe3Ndv_HRiW23-iWTr6jquK_AXdhRX7nvM4lmVTrxXFpelnJQ

The token expires every hour by default, though it can be configured differently - see the expiration option in the Identity Service Configuration Guide.

Exportieren des Projektnamens mit Umgebungsvariable OS_PROJECT_NAME . Zum Beispiel:

export OS_PROJECT_NAME=demo

Verwenden Sie dann das Compute API zum Auflisten der Varianten. Ersetzen Sie den Compute API Endpunkt mit einem der unten stehenden, der Ihr Projekt beinhaltet:

$ curl -s -H "X-Auth-Token: $OS_TOKEN" \
  $OS_COMPUTE_API/flavors \
  | python -m json.tool
{
    "flavors": [
        {
            "id": "1",
            "links": [
                {
                    "href": "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/flavors/1",
                    "rel": "self"
                },
                {
                    "href": "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/flavors/1",
                    "rel": "bookmark"
                }
            ],
            "name": "m1.tiny"
        },
        {
            "id": "2",
            "links": [
                {
                    "href": "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/flavors/2",
                    "rel": "self"
                },
                {
                    "href": "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/flavors/2",
                    "rel": "bookmark"
                }
            ],
            "name": "m1.small"
        },
        {
            "id": "3",
            "links": [
                {
                    "href": "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/flavors/3",
                    "rel": "self"
                },
                {
                    "href": "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/flavors/3",
                    "rel": "bookmark"
                }
            ],
            "name": "m1.medium"
        },
        {
            "id": "4",
            "links": [
                {
                    "href": "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/flavors/4",
                    "rel": "self"
                },
                {
                    "href": "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/flavors/4",
                    "rel": "bookmark"
                }
            ],
            "name": "m1.large"
        },
        {
            "id": "5",
            "links": [
                {
                    "href": "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/flavors/5",
                    "rel": "self"
                },
                {
                    "href": "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/flavors/5",
                    "rel": "bookmark"
                }
            ],
            "name": "m1.xlarge"
        }
    ]
}

Exportieren Sie $OS_PROJECT_ID aus dem Token-Aufruf und verwenden Sie dann das Compute API zum auflisten der Abbilder:

$ curl -s -H "X-Auth-Token: $OS_TOKEN" \
  http://8.21.28.222:8774/v2/$OS_PROJECT_ID/images \
  | python -m json.tool
{
    "images": [
        {
            "id": "2dadcc7b-3690-4a1d-97ce-011c55426477",
            "links": [
                {
                    "href": "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/images/2dadcc7b-3690-4a1d-97ce-011c55426477",
                    "rel": "self"
                },
                {
                    "href": "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/images/2dadcc7b-3690-4a1d-97ce-011c55426477",
                    "rel": "bookmark"
                },
                {
                    "href": "http://8.21.28.222:9292/f9828a18c6484624b571e85728780ba8/images/2dadcc7b-3690-4a1d-97ce-011c55426477",
                    "type": "application/vnd.openstack.image",
                    "rel": "alternate"
                }
            ],
            "name": "Fedora 21 x86_64"
        },
        {
            "id": "cfba3478-8645-4bc8-97e8-707b9f41b14e",
            "links": [
                {
                    "href": "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/images/cfba3478-8645-4bc8-97e8-707b9f41b14e",
                    "rel": "self"
                },
                {
                    "href": "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/images/cfba3478-8645-4bc8-97e8-707b9f41b14e",
                    "rel": "bookmark"
                },
                {
                    "href": "http://8.21.28.222:9292/f9828a18c6484624b571e85728780ba8/images/cfba3478-8645-4bc8-97e8-707b9f41b14e",
                    "type": "application/vnd.openstack.image",
                    "rel": "alternate"
                }
            ],
            "name": "Ubuntu 14.04 amd64"
        },
        {
            "id": "2e4c08a9-0ecd-4541-8a45-838479a88552",
            "links": [
                {
                    "href": "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/images/2e4c08a9-0ecd-4541-8a45-838479a88552",
                    "rel": "self"
                },
                {
                    "href": "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/images/2e4c08a9-0ecd-4541-8a45-838479a88552",
                    "rel": "bookmark"
                },
                {
                    "href": "http://8.21.28.222:9292/f9828a18c6484624b571e85728780ba8/images/2e4c08a9-0ecd-4541-8a45-838479a88552",
                    "type": "application/vnd.openstack.image",
                    "rel": "alternate"
                }
            ],
            "name": "CentOS 7 x86_64"
        },
        {
            "id": "c8dd9096-60c1-4e23-a486-82955481df9f",
            "links": [
                {
                    "href": "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/images/c8dd9096-60c1-4e23-a486-82955481df9f",
                    "rel": "self"
                },
                {
                    "href": "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/images/c8dd9096-60c1-4e23-a486-82955481df9f",
                    "rel": "bookmark"
                },
                {
                    "href": "http://8.21.28.222:9292/f9828a18c6484624b571e85728780ba8/images/c8dd9096-60c1-4e23-a486-82955481df9f",
                    "type": "application/vnd.openstack.image",
                    "rel": "alternate"
                }
            ],
            "name": "CentOS 6.5 x86_64"
        },
        {
            "id": "f97b8d36-935e-4666-9c58-8a0afc6d3796",
            "links": [
                {
                    "href": "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/images/f97b8d36-935e-4666-9c58-8a0afc6d3796",
                    "rel": "self"
                },
                {
                    "href": "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/images/f97b8d36-935e-4666-9c58-8a0afc6d3796",
                    "rel": "bookmark"
                },
                {
                    "href": "http://8.21.28.222:9292/f9828a18c6484624b571e85728780ba8/images/f97b8d36-935e-4666-9c58-8a0afc6d3796",
                    "type": "application/vnd.openstack.image",
                    "rel": "alternate"
                }
            ],
            "name": "Fedora 20 x86_64"
        }
    ]
}

Exportieren Sie $OS_PROJECT_ID aus dem Token-Aufruf und verwenden Sie dann das Compute API zum auflisten der Server:

$ curl -s -H "X-Auth-Token: $OS_TOKEN" \
  http://8.21.28.222:8774/v2/$OS_PROJECT_ID/servers \
  | python -m json.tool
{
    "servers": [
        {
            "id": "41551256-abd6-402c-835b-e87e559b2249",
            "links": [
                {
                    "href": "http://8.21.28.222:8774/v2/f8828a18c6484624b571e85728780ba8/servers/41551256-abd6-402c-835b-e87e559b2249",
                    "rel": "self"
                },
                {
                    "href": "http://8.21.28.222:8774/f8828a18c6484624b571e85728780ba8/servers/41551256-abd6-402c-835b-e87e559b2249",
                    "rel": "bookmark"
                }
            ],
            "name": "test-server"
        }
    ]
}

OpenStack Kommandozeilenclients

Für Scripting und einfachere Anfragen können Sie einen Kommandozeilenclient, wie z.B. den openstack-client, verwenden. Dieser Client gibt Ihnen die Möglichkeit, die Dienst Identity, Compute, Block Storage und Objekt Storage über deren API mittels Kommandozeileninterface zu bedienen. Jedes OpenStack Projekt besitzt einen dazugehöriges Client Projekt, dass Python API Bindings und ein Kommandozeileninterface (CLI) beinhaltet.

Für Informationen über die Kommandozeilen-Clients, siehe OpenStack Kommandozeilenschnitstelle Referenz.

Installiere die Clients

Benutzen Sie pip um OpenStack Clients auf Mac OS X oder einem Linux System zu installieren. Es ist einfach und stellt sicher, dass Sie die aktuellste Version der Clients von dem Python Package Index bekommen. Außerdem lässt Sie pip Pakete aktualisieren oder entfernen.

Sie müssen den jeweiligen Client für das Projekt getrennt installieren, aber der python-openstackclient deckt mehrere Projekte ab.

Installieren oder Aktualisieren eines Client-Paketes:

$ sudo pip install [--upgrade] python-PROJECTclient

PROJEKT ist der Projektname.

Als Beispiel, installieren des openstack Clients:

$ sudo pip install python-openstackclient

Um den openstack Client zu aktualisieren, führen Sie dieses Kommando aus:

$ sudo pip install --upgrade python-openstackclient

Um den openstack Client zu entfernen, führen Sie dieses Kommando aus:

$ sudo pip uninstall python-openstackclient

Bevor Sie Kommandos mit dem Client verwenden können müssen Sie die openrc Datei downloaden und einsourcen um die Umgebungsvariablen zu setzen.

Vollständige Informationen zu den OpenStack Clients, einschließlich der Verwendung der openrc Datei, finden Sie im OpenStack End User Guide, OpenStack Administrator Guide, und der OpenStack Command-Line Interface Reference.

Starten Sie eine Instanz

Um eine Instanz zu starten müssen Sie einen Namen, ein Abbild und eine Variante für Ihre Instanz auswählen.

Zum Auflisten aller verfügbaren Abbilder rufen Sie das Compute API mittels openstack Client auf:

$ openstack image list
+--------------------------------------+------------------+
| ID                                   | Name             |
+--------------------------------------+------------------+
| a5604931-af06-4512-8046-d43aabf272d3 | fedora-20.x86_64 |
+--------------------------------------+------------------+

Führen Sie folgendes Kommando aus um eine Liste der Varianten anzuzeigen:

$ openstack flavor list
+----+-----------+-----------+------+-----------+------+-------+-----------+
| ID | Name      | Memory_MB | Disk | Ephemeral | Swap | VCPUs | Is_Public |
+----+-----------+-----------+------+-----------+------+-------+-----------+
| 1  | m1.tiny   | 512       | 0    | 0         |      | 1     | True      |
| 2  | m1.small  | 2048      | 20   | 0         |      | 1     | True      |
| 3  | m1.medium | 4096      | 40   | 0         |      | 2     | True      |
| 4  | m1.large  | 8192      | 80   | 0         |      | 4     | True      |
| 42 | m1.nano   | 64        | 0    | 0         |      | 1     | True      |
| 5  | m1.xlarge | 16384     | 160  | 0         |      | 8     | True      |
| 84 | m1.micro  | 128       | 0    | 0         |      | 1     | True      |
+----+-----------+-----------+------+-----------+------+-------+-----------+

Um eine Instanz zu starten, notieren Sie sich die IDs des gewünschten Abbildes und der Variante.

Um die my_instance Instanz zu starten, geben Sie das openstack server create Kommando mit Abbild und Varianten ID sowie dem Servernamen ein:

$ openstack server create --image a5604931-af06-4512-8046-d43aabf272d3 --flavor 1 my_instance
+--------------------------------------+---------------------------------------------------------+
| Field                                | Value                                                   |
+--------------------------------------+---------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                  |
| OS-EXT-AZ:availability_zone          | nova                                                    |
| OS-EXT-STS:power_state               | 0                                                       |
| OS-EXT-STS:task_state                | scheduling                                              |
| OS-EXT-STS:vm_state                  | building                                                |
| OS-SRV-USG:launched_at               | None                                                    |
| OS-SRV-USG:terminated_at             | None                                                    |
| accessIPv4                           |                                                         |
| accessIPv6                           |                                                         |
| addresses                            |                                                         |
| adminPass                            | 3vgzpLzChoac                                            |
| config_drive                         |                                                         |
| created                              | 2015-08-27T03:02:27Z                                    |
| flavor                               | m1.tiny (1)                                             |
| hostId                               |                                                         |
| id                                   | 1553694c-d711-4954-9b20-84b8cb4598c6                    |
| image                                | fedora-20.x86_64 (a5604931-af06-4512-8046-d43aabf272d3) |
| key_name                             | None                                                    |
| name                                 | my_instance                                             |
| os-extended-volumes:volumes_attached | []                                                      |
| progress                             | 0                                                       |
| project_id                           | 9f0e4aa4fd3d4b0ea3184c0fe7a32210                        |
| properties                           |                                                         |
| security_groups                      | [{u'name': u'default'}]                                 |
| status                               | BUILD                                                   |
| updated                              | 2015-08-27T03:02:28Z                                    |
| user_id                              | b3ce0cfc170641e98ff5e42b1be9c85a                        |
+--------------------------------------+---------------------------------------------------------+

Bemerkung

Informationen zu den von den OpenStack Komponenten verwendeten Standardports finden Sie unter Firewalls und Standardports in der OpenStack Installationsanleitung.