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

来月、クラウドコンピューティングEXPO秋が幕張で行われます。
まつぼっくりも観覧に行く予定ですので、その際には現場の空気を
レポートいたします。お楽しみ下さい。

前回Keystoneの動作を確認しましたね。

ついでといってはなんですが、Keystoneにてユーザを作成する
スクリプトを載せておきます。

$ cat keystone_userlist.py
#!/usr/bin/python

from open_conn_admin import keystone

keystone.users.create(name="nssadmin",
        password="secretword",
        tenant_id="2783e814686846a398f69763c906b6cb")


実行結果
$ ./keystone_userlist.py
(結果抜粋)
-----------
nssadmin
ddf69a5f55f4419b9f3908d7243ae737
None
-----------

上記のスクリプトで読み込んでいるopen_conn_adminは第一回で
作成したスクリプトです。
Keystoneを呼び出し、usersのcreateメソッドを呼び出しnssadminを
作成しています。
このようにオブジェクトさえ取得してしまえば案外簡単に操作をすることができます。


さて、これからはKeystone以外のサービスを確認しますよ。
次は仮想サーバのサービスのNovaです。

$ cat nova_vmlist.py
#!/usr/bin/python

from open_conn_demo import nova

for sv in nova.servers.list():
        print sv

実行結果
$ ./nova_vmlist.py
<Server: test>
案外簡単に仮想マシンのリストが取得できました。


次はテンプレートイメージを管理するglanceです。
$ cat glance_imagelist.py
#!/usr/bin/python

from open_conn_admin import glance

for image in glance.images.list():
        print image

実行結果
$ ./glance_imagelist.py
Traceback (most recent call last):
  File "./glance_imagelist.py", line 5, in <module>
    for image in glance.images.list():
  File "/usr/lib/python2.6/site-packages/glanceclient/v1/images.py", line 174, in paginate
    images = self._list(url, "images")
  File "/usr/lib/python2.6/site-packages/glanceclient/common/base.py", line 53, in _list
    resp, body = self.api.json_request('GET', url)
  File "/usr/lib/python2.6/site-packages/glanceclient/common/http.py", line 266, in json_request
    resp, body_iter = self._http_request(url, method, **kwargs)
  File "/usr/lib/python2.6/site-packages/glanceclient/common/http.py", line 235, in _http_request
    raise exc.CommunicationError(message=message)
glanceclient.exc.CommunicationError: Error communicating with http://172.16.0.10:9292 [Errno 113] No route to host


イメージのリストを取得するスクリプトですが、おや、大量にエラーを吐きました。
まつぼっくりの環境では管理端末からOpenStackへ命令を送っているのですが、
出力されたエラーを見るとその通信に問題が発生したようです。

glanceの通信がOpenStackコントローラー側のiptablesにてTCPポート9292の
通信が切断されている可能性がありますね。
試しにOpenStackのiptablesを停止して確認してみます。


OpenStackコントローラーにて実行
[root@sv01 ~]# service iptables stop
iptables: チェインをポリシー ACCEPT へ設定中filter nat mangle [  OK  ]
iptables: ファイアウォールルールを消去中: [  OK  ]
iptables: モジュールを取り外し中: iptable_filter iptable_nat iptable_filter iptable_nat ip_tables[失敗]

サービス停止中に[失敗]したのはiptable_natですが、OpeStackコントローラー内部にてアドレス変換のNAT処理が行われているため、その停止が出来なかったようです。
サービス停止でフィルターは停止したため、
この状態でglanceのスクリプトを実行してみましょう。


実行結果
$ ./glance_imagelist.py
<Image {u'status': u'active', 
u'virtual_size': None, 
u'name': u'fedora', 
u'deleted': False, 
u'container_format': u'bare', 
u'created_at': u'2014-09-04T21:45:55', 
u'disk_format': u'qcow2', 
u'updated_at': u'2014-09-04T21:48:57', 
u'properties': {}, 
u'owner': u'e7e70b90c404447184784b1b2108edac', 
u'protected': True, u'min_ram': 0, 
u'checksum': u'511d9d3235079f1c381d39eb5a9fda1e', 
u'min_disk': 0, u'is_public': True, 
u'deleted_at': None, 
u'id': u'486897ff-ff66-4287-ada6-45735285c2b4', 
u'size': 239534080}>
※結果は見やすいよう生成しています


無事イメージのリストが取得できたようです。
このままiptablesを停止したままにしてはおけないのでglanceの通信が通るためのフィルタールールを追加します。

iptablesの設定ファイルを見ると以下のルールがありました。
/etc/sysconfig/iptables
-A INPUT -s 172.16.0.10/32 -p tcp -m multiport --dports 9292 -m comment --comment "001 glance incoming glance_172.16.0.10" -j ACCEPT

管理端末からのTCP9292を開けてあげれば良さそうです。
ちょっと無理やりですが、上記のルールの直下にviエディタで以下のルールを一行追加します。

-A INPUT -s 172.16.0.22/32 -p tcp -m multiport --dports 9292 -m comment --comment "002 glance incoming glance_172.16.0.22" -j ACCEPT
※172.16.0.22は管理端末のIPアドレスです。

iptablesを再起動します。
[root@sv01 ~]# service iptables restart

再度スクリプトを管理端末から実行し、フィルターが正しく設定されたことを確認します。
$ ./glance_imagelist.py


あとneutron、cinderの接続確認があるのですが、エラーが発生してしまい
記事の説明が長くなってしまったので次回とさせていただきます。

ごきげんよう。