上之前的博客已經簡單的說了如何增加一個擴展api,這次就簡單說一些如何爲這個擴展api增加客戶端。
首先需要定義extension manager類(我定義在/usr/lib/python2.7/site-packages/novaclient/v2/storage.py):
from novaclient import base
class StorageExtensionManager(base.ManagerWithFind):
def list(self):
pass
def get_detail(self):
url = "/os-storage-pool/detail"
resp,body = self.api.client.get(url)
return body
StorageExtensionManager類的get_detail方法通過Nova Client對象向nova api發送GET /os-storage-pool/detail請求。這個請求最終會由之前博客中擴展的api處理
調用我們的客戶端use_storage.py
from novaclient.v2 import client as nova_client
from novaclient.v2 import storage
class ExtensionManagerMeta(object):
def __init__(self, name, manager_class):
self.name = name
self.manager_class = manager_class
user = {
'username': 'nova',
'password': 'YOURPASS',
'tenant': 'service',
'authurl': 'http://YOURHOST:5000/v2.0',
}
def storage_client():
extensions = [ExtensionManagerMeta('storage', storage.StorageExtensionManager)]
client = nova_client.Client(user.get('username'), user.get('password'), project_id = user.get('tenant'), auth_url = user.get('authurl'), extensions = extensions)
return client.storage
def get_storage_detail():
return storage_client.get_detail()
if __name__ == '__main__':
print get_storage_detail()
這裏的user定義了用戶信息,ExtensionManagerMeta定義了extension manager的元數據類。
最後測試一下:
python use_storage.py
{"pool_name": "ssd"}
更多精彩文章,請搜索微信公衆號“扶艾”。我們定期分享OpenStack相關技術文章,在這裏,只有純乾貨。