OpenStack API

Untuk otentikasi akses ke layanan OpenStack, Anda harus terlebih dahulu mengirim permintaan otentikasi dengan 'payload of credential' ke OpenStack Identity untuk mendapatkan token otentikasi.

Kredensial biasanya merupakan kombinasi antara nama pengguna dan kata sandi Anda, dan secara opsional, nama atau ID proyek awan Anda. Mintalah administrator awan Anda untuk nama pengguna, kata sandi, dan proyek Anda sehingga Anda dapat menghasilkan token otentikasi. Sebagai alternatif, Anda dapat menyediakan token daripada nama pengguna dan kata sandi.

Ketika Anda mengirim permintaan API, Anda memasukan token di header X-Auth-Token. Jika Anda mengakses beberapa layanan OpenStack, Anda harus mendapatkan token untuk setiap layanan. Token berlaku untuk waktu yang terbatas sebelum kadaluarsa. Token juga dapat menjadi tidak valid karena alasan lain. Misalnya, jika peran user berubah, token yang ada milik user tidak valid lagi.

Alur kerja otentikasi dan permintaan API

  1. Minta token otentikasi dari endpoint Identity dimana administrator cloud memberi Anda. Kirim 'payload of credential' dalam permintaan seperti yang ditunjukkan pada :ref: authenticate. Jika permintaan berhasil, server akan mengembalikan token otentikasi.

  2. Kirim permintaan API dan masukan token di header X-Auth-Token. Terus kirim permintaan API dengan token itu sampai layanan menyelesaikan permintaan itu atau terjadi kesalahan Unauthorized (401).

  3. Jika terjadi kesalahan Unauthorized (401), mintalah token lain.

Contoh di bagian ini menggunakan perintah cURL. Untuk informasi tentang cURL, lihat http://curl.haxx.se/. Untuk informasi tentang API OpenStack, lihat :ref: current_api_versions.

Autentikasi

'Payload of credential' untuk mengotentikasi berisi parameter ini:

Parameter kredensial

Parameter

Tipe

Deskripsi

User Domain (wajib)

string

Domain pengguna.

username (wajib)

string

Username. Jika Anda tidak memberikan username dan password, Anda harus memberikan token.

password (wajib)

string

Password untuk user.

Project Domain (optional)

string

Domain proyek. Ini adalah bagian yang dibutuhkan dari objek lingkup.

Project Name (opsional)

string

Nama proyek. Project ID dan Project Name bersifat opsional.

Project ID (opsional)

string

ID proyek project ID dan Project Name bersifat opsional. Tapi salah satunya diperlukan bersamaan dengan *Project Domain *. Mereka terbungkus dalam lingkup objek. Jika Anda tidak mengetahui nama proyek atau ID, kirimkan sebuah permintaan tanpa objek lingkup apapun.

Dalam pengerahan OpenStack tipikal yang menjalankan Identity, Anda dapat menentukan nama proyek Anda, dan nama pengguna dan kredensial kata sandi untuk diautentikasi.

Pertama, ekspor nama proyek Anda ke variabel lingkungan OS_PROJECT_NAME`, nama domain proyek Anda ke variabel lingkungan ``OS_PROJECT_DOMAIN_NAME, nama pengguna Anda ke variabel lingkungan OS_USERNAME, kata sandi Anda ke variabel lingkungan``OS_PASSWORD `` dan nama domain pengguna Anda ke variabel lingkungan OS_USER_DOMAIN_NAME.

Contoh di bawah ini menggunakan endpoint dari instalasi Ocata dengan mengikuti panduan instalasi. Namun, Anda juga dapat menggunakan $OS_AUTH_URL sebagai variabel lingkungan yang diperlukan untuk mengubah URL.

Kemudian, jalankan command cURL ini untuk meminta token:

$ 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

Jika permintaan berhasil, ia mengembalikan kode tanggapan Created (201) beserta token sebagai nilai pada header tanggapan X-Subject-Token. Header diikuti oleh body respon yang memiliki objek tipe token yang memiliki tanggal kedaluwarsa token dan waktu dalam bentuk "expires_at":"datetime" beserta atribut lainnya.

Contoh berikut menunjukkan respon yang sukses:

*   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
        }
    }
}

Catatan

Dalam permintaan di atas, string kueri nocatalog digunakan karena Anda hanya ingin mendapatkan token dan tidak menginginkan katalog layanan (jika tersedia untuk pengguna) mengacaukan hasilnya. Jika pengguna ingin mendapatkan katalog layanan, string kueri ini tidak perlu ditambahkan ke URL.

Kirim permintaan API

Bagian ini menunjukkan cara membuat beberapa panggilan Compute API dasar. Untuk daftar lengkap panggilan Compute API, lihat Compute API.

Ekspor token ID ke variabel lingkungan "OS_TOKEN``. Sebagai contoh:

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.

Ekspor nama proyek ke variabel lingkungan OS_PROJECT_NAME. Sebagai contoh:

export OS_PROJECT_NAME=demo

Kemudian, gunakan API Compute untuk daftar flavor, menggantikan Compute API endpoint dengan satu berisi ID proyek Anda di bawah ini:

$ 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"
        }
    ]
}

Ekspor $OS_PROJECT_ID dari panggilan tanda, dan kemudian menggunakan Compute API untuk daftar image:

$ 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"
        }
    ]
}

Ekspor $OS_PROJECT_ID dari panggilan tanda, dan kemudian menggunakan Compute API untuk daftar 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 command-line klien

Untuk pekerjaan scripting dan permintaan sederhana, Anda dapat menggunakan command-line klien seperti "openstack-client`` klien. Klien ini memungkinkan Anda untuk menggunakan Identity, Compute, Block Storage, dan Object Storage API melalui interface command-line. Juga, setiap proyek OpenStack memiliki proyek klien terkait yang meliputi Python API bindings dan interface command-line (CLI).

Untuk informasi tentang klien command-line, lihat OpenStack Command-Line Interface Reference.

Menginstal klien

Gunakan pip untuk menginstal klien OpenStack pada sistem Mac OS X atau Linux. Mudah dan memastikan bahwa Anda mendapatkan versi terbaru dari klien dari Python Package Index <https://pypi.org/> __. Juga, pip memungkinkan Anda memperbarui atau menghapus paket.

Anda harus menginstal klien untuk setiap proyek secara terpisah, tetapi python-openstackclient dapat mencakup beberapa proyek.

Menginstal atau memperbarui paket klien:

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

Dimana PROJECT adalah nama proyek.

Contoh install openstack klien:

$ sudo pip install python-openstackclient

Untuk memperbarui openstack klien, jalankan command ini:

$ sudo pip install --upgrade python-openstackclient

Untuk menghapus openstack klien, jalankan command ini:

$ sudo pip uninstall python-openstackclient

Sebelum Anda dapat mengeluarkan command klien, Anda harus men-download dan mendapatkan sumber file ''openrc`` untuk mengatur variabel lingkungan.

Untuk informasi lengkap tentang klien OpenStack, termasuk cara mencari file openrc, lihat OpenStack End User Guide, OpenStack Administrator Guide, dan OpenStack Command-Line Interface Reference.

Meluncurkan instance

Untuk meluncurkan instance, Anda harus memilih nama, image, dan flavor untuk instance Anda.

Untuk melihat daftar image yang tersedia, panggil API Compute melalui openstack klien:

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

Untuk melihat daftar flavor, jalankan command ini:

$ 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      |
+----+-----------+-----------+------+-----------+------+-------+-----------+

Untuk memulai sebuah instance, perhatikan ID image yang Anda inginkan dan flavor.

Untuk meluncurkan instance my_instance, jalankan command OpenStack server create dengan image dan flavor ID dan nama server:

$ 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                        |
+--------------------------------------+---------------------------------------------------------+

Catatan

Untuk informasi tentang port default yang digunakan komponen OpenStack, lihat Firewalls and default ports dalam OpenStack Installation Guide.