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¶
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.
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).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 |
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.