OpenStackを操作するコードを書くときには、今までは基本的にはPythonからrequestsを使って、直接RESTコールを実装する事で大体事が足りてました。OpenStackのPython用のSDKは開発されていましたが、SDK自体の開発が継続するか怪しい点もあり、困ったらnova client等のProject毎のクライアントや最近出てきたopenstack clientをimportして使いまわせば良いと考えてました。以下の記事でopenstack clientがPython SDKベースに移行予定との事で、状況は良くなってきていると考えてPython SDKを試してみました。
インストール
まずはpipでインストールするか、Git cloneします。
# pip install openstacksdk
Gitのレポジトリは以下になります。
https://github.com/openstack/python-openstacksdk
Documentは以下になります。
http://developer.openstack.org/sdks/python/openstacksdk/
インストール後に実際のPythonのコード中に使うインポートパッケージ名はopenstackです。
使い方
基本的にConnectionを作って、それを元に各プロジェクト毎に用意されているメソッドを呼び出します。User Guideはちょっとしたサンプルの位置づけで、言及されていないメソッドはDocumentの中のAPI Guideを見るとメソッドが一覧で書かれています。以下はサーバ一覧を取得しています。
from openstack import connection conn = connection.Connection( auth_url="http//openstack:5000/v3", project_name="big_project", username="SDK_user" password="Password") for server in conn.compute.servers(): print(server)
注意点はサーバー一覧でimageやflavorはid渡しされるので、それぞれの表示上の名前が必要な場合は別途idから名前を参照する必要があります。imageを取得する例は以下の通りになります。
image = con.compute.get_image(server["image"]["id"]) image_name = image["name"]
まとめ
SDKは以前に比べると大分良くなってきている点はありますが、まだまだ足りない点も幾つかあります。特にプロジェクト毎のサポート範囲がバラバラな点は気になりました。2015/12/31時点では意外とNeutronはサポートが厚く、Nova / Cinderは機能が一部に制限されてます。今後openstack clientでの採用を行うのであればSDK側にも色々実装されていくのだと考えます。