怎样写 OpenStack Neutron 的 Extension (四)
上文說到需要在?/neutronclient/v2_0/myextension/extension.py 中分別定義五個(gè) class:List/Show/Create/Delete/UpdateExtension。具體形式如下:
import argparse import loggingfrom neutronclient.neutron import v2_0 as neutronV20 from neutronclient.openstack.common.gettextutils import _RESOURCE = 'myextension'
class ListExtension(neutronV20.ListCommand):"""List extensions"""resource = RESOURCElog = logging.getLogger(__name__ + '.ListExtension')list_columns = ['id', 'name']class ShowExtension(neutronV20.ShowCommand):"""Show information of a given extension."""resource = RESOURCElog = logging.getLogger(__name__ + '.ShowExtension')class CreatePhysicalGateway(neutronV20.CreateCommand):"""Create an extension."""resource = RESOURCElog = logging.getLogger(__name__ + '.CreateExtension')def add_known_arguments(self, parser):parser.add_argument('name', metavar='NAME',help=_('Name of extension to create'))def args2body(self, parsed_args):body = {self.resource: {'name': parsed_args.name}}return body
class UpdateExtension(neutronV20.UpdateCommand):"""update a given extension."""resource = RESOURCElog = logging.getLogger(__name__ + '.UpdateExtension') class DeleteExtension(neutronV20.DeleteCommand):"""Delete a given extension."""resource = RESOURCElog = logging.getLogger(__name__ + '.DeleteExtension')
這些 class 處在接受 CLI 命令的第一線,負(fù)責(zé)將命令轉(zhuǎn)化成 API call。需要特別注意的是 CreateExtension 這個(gè)類,它有兩個(gè)方法 add_known_arguments 和 args2body。前者定義了 CLI 命令接受哪些參數(shù),后者規(guī)定如何將收到的參數(shù)打包起來。
這些參數(shù)打包之后就會(huì)發(fā)給 neutron 后臺(tái)中我們自己定義的 plugin controller,但是如何發(fā)送這些參數(shù)還需要我們?nèi)?/neutronclient/v2_0/client.py 的 Client 類中設(shè)置:
首先是 uri 路徑:
myextensions_path = "/myextensions"myextension_path = "/myextensions/%s"然后是每個(gè)操作所對應(yīng)的傳遞方法:
@APIParamsCalldef list_myextensions(self, retrieve_all=True, **_params):"""Fetches a list of all myextensions for a tenant."""return self.list('myextensions', self.myextensions_path, retrieve_all,**_params)@APIParamsCalldef show_myextension(self, myextension, **_params):"""Fetches information of a certain entry in myextension."""return self.get(self.myextension_path % (myextension), params=_params)@APIParamsCalldef create_myextension(self, body=None):"""Creates a new myextension entry."""return self.post(self.myextensions_path, body=body)@APIParamsCalldef delete_myextension(self, myextension):"""Deletes the specified myextension."""return self.delete(self.myextension_path % (myextension))@APIParamsCalldef update_myextension(self, myextension, body=None):"""Updates a myextension."""return self.put(self.myextension_path % (myextension), body=body)如此一來,我們自己實(shí)現(xiàn)的 neutron plugin 就能夠收到 CLI 發(fā)送過來的命令啦。
下一章再來說說怎么修改 OpenStack 的 Dashboard 來顯示我們在 extension 中添加的新元素。
轉(zhuǎn)載于:https://www.cnblogs.com/zhutianshi/p/3926240.html
總結(jié)
以上是生活随笔為你收集整理的怎样写 OpenStack Neutron 的 Extension (四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修改NLS_DATE_FORMAT的四种
- 下一篇: ios中静态库的创建和使用、制作通用静态