Download - OpenStack API
OpenStack API
吉山あきら[email protected]
目次
● OpenStack 各コンポーネントの API● OpenStack API● OpenStack クライアントライブラリ
OpenStack 各コンポーネントの API
Nova の API
標準装備の API● OpenStack Compute API (v2)● Amazon EC2 互換 API ※Grizzly リリースで廃止予定
● Amazon EC2 互換 Metadata API● OpenStack Volume API (v1) ※Grizzly リリースで廃止予定
サードパーティ API● Cloud Infrastructure Management Interface ( CIMI )
– https://github.com/osaddon/cimi/
● Open Cloud Computing Interface (OCCI)– https://github.com/tmetsch/occi-os
Swift の API
標準装備の API● OpenStack Object Storage API (v2.0)
サードパーティ API● Amazon S3 互換 API
– https://github.com/fujita/swift3● Cloud Data Management Interface (CDMI)
– https://github.com/osaddon/cdmi
その他のコンポーネントの API
Glance● OpenStack Image API (v1.1)
Keystone● OpenStack Identity API (v2.0)
Quantum● OpenStack Networking API (v2.0)
Cinder● OpenStack Volume API (v1.0)
※Nova の Volume API と同一
OpenStack API
OpenStack API 登場以前
Nova は当初 Amazon EC2 互換 API のみ● 標準 CLI は Eualyptus 用の Euca2ools
独自の機能拡張をする際、 EC2 互換 API では…● クライアントツールを改造/独自開発する必要がある● 結果的に API の互換性が低下する
OpenStack プロジェクトで自由に拡張可能なRESTful API を開発する事にした
OpenStack API
● Rackspace のクラウドサービス API を参考● 比較的素直な RESTful API
リソースの create/read/update/delete が基本
● ユーザ認証とサービス操作で別の URL を使用● ユーザ認証… Keystone サービス API の URL● サービス操作… Keystone から返されたエンドポイント URL
OpenStack API のユーザ認証
Keystone
Nova 等
① ユーザ名、→パスワード
←② エンドポイント、トークン
サービス API( 5000/TCP )
OpenStack API のサービス操作
Keystone
Nova 等
③ →トークン、操作
④ ↑トークン
↓⑤ ロール
←⑥ 操作結果
管理 API( 35357/TCP )
OpenStack Compute API( 8774/TCP )
エンドポイントとトークン
エンドポイント
各種 OpenStack API の URL(全コンポーネントの URL が一度に提供される)
トークン
各種 OpenStack API のユーザ認証でユーザ名・パスワードの代わりに使用する文字列– 有効期限がある– HTTP のセッションクッキーと同様
参考: Amazon EC2 互換 API
Keystone
Nova 等
① →操作・署名
↑② 操作・署名
↓③ ロール
←④ 操作結果
管理 API( 35357/TCP )
Amazon EC2 互換 API( 8773/TCP )
署名( Signature ):ユーザ名・操作日時を含むHTTP リクエストボディをユーザのシークレットキーで計算したハッシュ値
Curl での例①:ユーザ認証$ curl
-d '{"auth": {"tenantName": "tenant1”, "passwordCredentials": {"username": "joe", "password": "shhh"}}}'
-H "Content-type: application/json" http://localhost:5000/v2.0/tokens
{"access": { "token": {"expires": "2012-10-26T22:27:40Z", "id": "2cd10cc33d034a50b30f9867241c93cc", "tenant": ... }, "serviceCatalog": [ {"nova": { "endpoints": [ {"adminURL": "http://10.0.2.15:8774/v2.0", "region": "RegionOne", "id": “....”, "internalURL": "http://10.0.2.15:8774/v2.0", "publicURL": "http://10.0.2.15:8774/v2.0"}], "name": "nova", "type": "compute”, ...},
Keystone の認証 API
実行結果を見やすく加工
実際には1行で記述
Curl での例②:サービス操作$ curl -v
-H "X-Auth-Token:2cd10cc33d034a50b30f9867241c93cc" http://10.0.2.15:8774/v2.0/images
{"images": [ {"id": 3, "links": [ {"href": "http://10.0.2.15:8774/v2.0/images/3", "rel": "self"}, {"href": "http://10.0.2.15:8774/images/3", "rel": "bookmark"}], "name": "ubuntu-11.04-server"}, {"id": 2, "links": [ {"href": "http://10.0.2.15:8774/v2.0/images/2", "rel": "self"}, {"href": "http://10.0.2.15:8774/images/2", "rel": "bookmark"}], "name": "ubuntu-11.04-initrd"}, {"id": 1, "links": [ {"href": "http://10.0.2.15:8774/v2.0/images/1", "rel": "self"}, {"href": "http://10.0.2.15:8774/images/1", "rel": "bookmark"}], "name": "ubuntu-11.04-kernel"}]}
Nova の OpenStack Compute API
OpenStack クライアントライブラリ
クライアントライブラリ登場以前
各コンポーネントのソースコード中にクライアントアクセス用のソースコード( client.py 等)があり、これを他のコンポーネントが利用していた● Nova 用のサーバに Keystone や Glance の
ソースコードを全てインストール(無駄が多い)● 他コンポーネント用サーバも同様
コンポーネント毎の軽量ライブラリが必要
OpenStack クライアントライブラリ
OpenStack の複雑なユーザ認証と、各種 OpenStack API固有の利用可能な操作をPython で簡単に扱う為のライブラリ群● ネーミングルール
python-<コンポーネント名 >client● それぞれ API 操作用の CLI を含む
– python-novaclient には nova コマンドが付属している。他のライブラリも同様
– GlanceだけGlance 本体のソースコードに古い glance コマンドが残っている ※廃止予定
各ライブラリ名とバージョン
コンポーネント クライアントライブラリ名Folsom時のバージョン
Nova python-novaclient 2.9.0
Swift python-swiftclient 1.2.0
Glance python-glanceclient 0.5.1
Keystone python-keystoneclient 0.1.3
Quantum python-quantumclient 2.1
Cinder python-cinderclient 1.0.0
※OpenStack ライブラリのバージョン番号のポリシーがコロコロ変わるので、 git のタグには essex-1 や 2012.1 等が存在する
使用例 (python-novaclient)# python-novaclient をインポートfrom novaclient.v1_1 import client
# 操作用インスタンスを作成# USER, PASS, TENANT, AUTH_URL※ は文字列変数nt = client.Client(USER, PASS, TENANT, AUTH_URL, service_type="compute")
# サーバの一覧nt.servers.list()
# サーバの作成# NAME, IMAGE, FLAVOR, KEYNAME ※ は文字列変数nt.servers.create(NAME, IMAGE, FLAVOR, keyname=KEYNAME)
参考情報
● OpenStack API Quick Start
http://docs.openstack.org/api/quick-start/content/
● Programming OpenStack Compute API with Shell and Python
http://docs.openstack.org/api/openstack-compute/ programmer/content/
● API Specifications
http://docs.openstack.org/api/api-specs.html
● API Complete Reference
http://api.openstack.org/
Q & A
お疲れ様でした!