【OpenStack】 Python SDK コーディング #1

こんにちは、まつぼっくりと申します。

9月の3連休も終わってしまいましたね~
ずっと実家にいたのですが、あっというまに過ぎてしまいました。


さて、本題ですが世間ではつい先ほどに仮想化の波がきたかと思ったら今度は
プライベートクラウドの導入の波が来ているようです。

プライベートクラウドとは社内でAmazonAWSのようなIaaSを構築するというもの
ですが、有名どころではOpenStackやCloudStack、最近ではマイクロソフトからも
Azure Packという見た目がAzureの社内IaaSが出てきており、どれが主流となるかと
わくわく、ドキドキしております。

クラウドの展開と共に現在は運用の自動化が良くテーマに上がっており、今後は
プログラムが行える運用・構築エンジニアが勝ち残るのかなと感じており、実機
での検証を中心にコーディングを記事にしたいと思っています。

コーディングだけでなく箇所々々で基礎的な解説も入れつつゆっくり進んでいけたら
と考えております。



まずは仮想化OSとして有名なOpenStackにおけるPython SDKのコーディングです。


OpenStack(icehouse)は一台構成ですでに構築済みとなっております。




構築方法については今後どこかで紹介を入れたいと思います。


OpenStackSDKはOpenStackのサーバに導入されているため、
サーバ本体にPythonのスクリプトを置いて直接実行することができますが、
今回は別のクライアントを用意してスクリプトを実行し、OpenStackのコントローラーに命令を送ります。


クライアントはCentOS6.5を用意いたしました。
クライアントにOpenStackのPythonSDKを入れることでPythonスクリプトを用いて
OpenStackのコントローラーへアクセスすることが可能となります。

CentOSであればyumコマンドを用いて導入することが可能です。
yumが使えない場合はPythonのpipなどを用いてSDKをインストールして下さい。


<keystoneのSDKの導入例>
# yum install python-keystoneclient

  <OpenStack SDK>
  python-cinderclient
  python-novaclient
  python-keystoneclient
  python-glanceclient
  python-neutronclient
  python-swiftclient


SDKにて接続するためにはSDKをインポートし、認証先を入力してオブジェクトを
取得する必要があります。
以下2つのスクリプトを今後ほかのスクリプトで読み込みオブジェクトに対して
情報取得や命令を実施します。
ここではadminユーザ用とdemoユーザ用を用意しています。
スクリプトの保存場所はどこでも構いません。

admin用:open_conn_admin.py
demo用 :open_conn_demo.py


$ cat open_conn_admin.py
import keystoneclient.v2_0.client as ksclient
import novaclient.v1_1.client as nvclient
import cinderclient.v1.client as ciclient
import glanceclient.v1.client as glclient
from neutronclient.neutron import client as neclient

c_url = 'http://172.16.0.10:35357/v2.0'
n_url = 'http://172.16.0.10:9696/'
c_user = 'admin'
c_pass = 'xxxxxxxx'
c_tenant = 'admin'

keystone = ksclient.Client(auth_url=c_url,
                           username=c_user,
                           password=c_pass,
                           tenant_name=c_tenant)

nova = nvclient.Client(auth_url=c_url,
                           username=c_user,
                           api_key=c_pass,
                           project_id=c_tenant)

cinder = ciclient.Client(auth_url=c_url,
                           username=c_user,
                           api_key=c_pass,
                           project_id=c_tenant)

glance = glclient.Client(keystone.service_catalog.url_for(
                        service_type='image',
                        endpoint_type='publicURL'),
                        token=keystone.auth_token)

neutron = neclient.Client('2.0',
                        endpoint_url=n_url,
                        token=keystone.auth_token)


$ cat open_conn_demo.py
import keystoneclient.v2_0.client as ksclient
import novaclient.v1_1.client as nvclient
import cinderclient.v1.client as ciclient
import glanceclient.v1.client as glclient
from neutronclient.neutron import client as neclient

c_url = 'http://172.16.0.10:5000/v2.0'
n_url = 'http://172.16.0.10:9696/'
c_user = 'demo'
c_pass = 'xxxxxxxx'
c_tenant = 'demo'

keystone = ksclient.Client(auth_url=c_url,
                           username=c_user,
                           password=c_pass,
                           tenant_name=c_tenant)

nova = nvclient.Client(auth_url=c_url,
                           username=c_user,
                           api_key=c_pass,
                           project_id=c_tenant)

cinder = ciclient.Client(auth_url=c_url,
                           username=c_user,
                           api_key=c_pass,
                           project_id=c_tenant)

glance = glclient.Client(keystone.service_catalog.url_for(
                        service_type='image',
                        endpoint_type='publicURL'),
                        token=keystone.auth_token)

neutron = neclient.Client('2.0',
                        endpoint_url=n_url,
                        token=keystone.auth_token)


次回はこのスクリプトを使って正常に動作するかの確認を行います。