openstack 自定義extensions api客戶端

上之前的博客已經簡單的說了如何增加一個擴展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相關技術文章,在這裏,只有純乾貨。 





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章