OpenStack Python SDKを使ってみる

OpenStackを操作するコードを書くときには、今までは基本的にはPythonからrequestsを使って、直接RESTコールを実装する事で大体事が足りてました。OpenStackのPython用のSDKは開発されていましたが、SDK自体の開発が継続するか怪しい点もあり、困ったらnova client等のProject毎のクライアントや最近出てきたopenstack clientをimportして使いまわせば良いと考えてました。以下の記事でopenstack clientがPython SDKベースに移行予定との事で、状況は良くなってきていると考えてPython SDKを試してみました。

http://superuser.openstack.org/articles/openstack-mitaka-release-what-s-next-for-openstackclient-and-documentation

インストール

まずは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側にも色々実装されていくのだと考えます。

OpenStack Python SDKを使ってみる

Unityで作るOpenStackのGUI

これはOpenStack Advent Calender 2015の14日目の記事です。

はじめに

Unityはゲーム開発のPlatformで、Unityを利用すれば2D / 3Dの様々なゲームを簡単に開発出来ます。このUnityを使って、OpenStack GUIを使えば楽しいGUIが開発出来るのでは無いかと思いSilver Weekを利用して実装してみました。元々は山崎さんのスライドに触発されてます。

方針

OpenStackのRest APIを直接呼び出すコードを作成して、実装しています。今回のGUIのテーマですが、色々使い回しの出来て、ITと親和性の高く、国際的にも認知度の高いSushi(寿司)をベースにGUIの開発を行いました。Sushi等の3Dオブジェクトは自身でお絵かきするのでは無く、購入してます。Uniyでは3Dオブジェクトやスクリプト等をAssetと呼びますが、AssetはUnity内のAssetストアから購入可能です。今回は以下を購入 or 無料Downloadして利用してます。

  • Asian Food Heaven
    アジア系の食べ物の3Dオブジェクト集です。寿司等の3D Objectが含まれています
  • Best HTTP
    RESTでOpenStackで接続するために利用。標準のAPIでも良いですがより使い勝手が良いので使ってます

実装の結果

以下ビデオをご覧ください。

寿司がサーバー、巻物がボリューム、寿司台がネットワークとなっています。サーバーとNWは作成すると寿司、寿司台が降ってきます。Flavorによってネタのすrボリュームの作成はUnityらしさを出してあり、簡単なゲームになっています。ボールで巻物をピックアップすると、1個=1Gとなります。ボールが落ちるとそこでゲームオーバーとなり、ピックアップした巻物の数だけボリュームが作成可能です。

検証した接続先

OpenStakcはTrystack / RDO / MetaPodと接続してみて確認しています。それぞれアプリを作って接続した時のちょっとしたTipsです。

  • Trystack
    HTTPで実装されています。OpenStackでよく利用されるPortを利用するため、80番しか通さないインターネット環境から接続すると問題が生じました。
  • Conoha
    HTTPSで443で接続を提供してくれるので比較的に楽に実装出来ましたが、Volumeが200Gか500Gかの作成だったので 残念ながらVolume作成ゲームが使えませんでした。Conoha Document
  • MetaPod
    HTTPSでOpenStackのよく利用されるPort番号が使われてました。残念ながらUnityはHTTPSの接続は443以外は許可出来ないので、ネットワーク接続部分を他のモジュールを置き換えての対処が必要でした。以下BestHTTPのDocumenthttps://docs.google.com/document/d/181l8SggPrVF1qRoPMEwobN_1Fn7NXOu-VtfjE6wvokg/edit#

UnityでのUIの実装について

3D Objectの配置や、ゲームの実装についてはUnityが得意とする所なのでUnityのサイト内のチュートリアルに従えば簡単に実装が可能です。Unityを使ってコーディングして行く中で、注意が必要なのは基本的にC#(必要があればJava Script)のスクリプトを記述します。Scriptは空でも良いのですが、何らかのGame Objectに添付すると実行されます。独特の考え方として、Scriptを新規作成すると以下の空スクリプトが作成されます。シーン起動時にStartが呼ばれ定期的にUpdateが呼ばれます。そこら辺の考え方を理解するとCodingがやりやすくなると思います。

public class SushiParameter : MonoBehaviour {
    // Use this for initialization
    void Start () {
    }
    // Update is called once per frame
    void Update () {
    }
}

また、OpenStackのGUIを作るにはServer名を入れたりするためのUIが必要となります。UnityにはUIクラスが用意されているため、それを利用します。UIは3D Objectと同じく画面上で配置の調整が可能となっています。UIの位置を調整するためには、編集画面の中の2Dボタンを押すと位置調整がやりやすくなります。以下ざっとした動きです。

  • 起動するとログイン画面が表示されます
  • 認証情報を入力するとシーンの切り替えでSushiの画面に遷移します。シーンはUnityの考え方で、ゲームの次のステージへの切り替え等で利用されます。
  • 画面は3Dで作成されており、矢印キーを押すとカメラの位置が移動します。
  • Create Server / Networkを押すと新規作成画面が表示されます。今回はあらかじめ、新規作成画面を非表示で置いてあり、ボタンがクリックされると表示される手法を取っています。
  • Create Volumeを押すとゲームへシーンが切り替わります。キーボードの矢印ボタンで、慣性が与えられます。ボールと巻物の衝突を検知して、Pickup数のカウントを行っています。画面中は物理法則が効いてるので床から落ちると下に落下します。縦軸がマイナスになる所で落下を検知してゲームを終わらせて、確認画面を表示しています。Create VolumeがクリックされるとOpenStackに対してRestの命令を発行しています。
  • 作成後にSushiの元画面に戻ります。戻る時にコードから新しい巻物を生成しています。

まとめ

今回紹介したGUIは売り物では無いですが、Sushi Stackと名づけてOpenStack Summit Tokyoで展示しました。海外のエンジニア受けを狙って作りましたが、見事に刺さりました。すごく気に入ってくれた人は毎日見に来てたので作ったかいが有りました。ちなみに会社として展示してたので会社の上層部にも事前に見てもらったのですが受けが良く色々とUpdateのアイデアも出していただけました。

 

Unityで作るOpenStackのGUI