欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

怎样写 OpenStack Neutron 的 Extension (四)

发布时间:2024/1/17 编程问答 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 怎样写 OpenStack Neutron 的 Extension (四) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

上文说到需要在 /neutronclient/v2_0/myextension/extension.py 中分别定义五个 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 命令的第一线,负责将命令转化成 API call。需要特别注意的是 CreateExtension 这个类,它有两个方法 add_known_arguments 和 args2body。前者定义了 CLI 命令接受哪些参数,后者规定如何将收到的参数打包起来。

这些参数打包之后就会发给 neutron 后台中我们自己定义的 plugin controller,但是如何发送这些参数还需要我们去 /neutronclient/v2_0/client.py 的 Client 类中设置:

首先是 uri 路径:

myextensions_path = "/myextensions"myextension_path = "/myextensions/%s"

然后是每个操作所对应的传递方法:

   @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)

如此一来,我们自己实现的 neutron plugin 就能够收到 CLI 发送过来的命令啦。

下一章再来说说怎么修改 OpenStack 的 Dashboard 来显示我们在 extension 中添加的新元素。

转载于:https://www.cnblogs.com/zhutianshi/p/3926240.html

总结

以上是生活随笔为你收集整理的怎样写 OpenStack Neutron 的 Extension (四)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。