怎样写 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 (四)相关推荐
- 怎样写 OpenStack Neutron 的 Extension (三)
通过上几章的介绍,我们现在的 myplugin 文件夹看上去应该是这样的: - neutron/ - plugins/ - myplugin/ - __init__.py - plugin.py - ...
- OpenStack Neutron浅析(四)
传统网络到虚拟化网络的演进 传统网络: 虚拟网络: 布式虚拟网络: 单一平面网络到混合平面网络的演进 单一平面租户共享网络:所有租户共享一个网络(IP 地址池),只能存在单一网络类型(VLAN 或 F ...
- 带着问题了解Openstack Neutron安全组
女主宣言 本文出自于ADDOPS团队,该文章作者李文新是360 HULK云平台容器化及虚拟化平台运维开发工程师,负责网络模块的设计与开发.本文是由他最近解决的一个Openstack Neutron安全 ...
- 深入理解 OpenStack Neutron:VXLAN
深入理解 OpenStack Neutron:VXLAN 原创: 李宗标 网事如烟云 2017-02-01 3.8 VXLAN 终于用上了这张图: 老爷子,鸡年大吉! 好吧,我们言归正传!(老爷子说: ...
- 深度探索 OpenStack Neutron:Neutron 实现模型
此文章源于鄙人微信公众号"标哥说天下" [上次发表了(1),这次就不发表(2)了,而是在(1)的基础上继续往下写.如果您已经看过(1),可以往下翻,从 4.2.3 小节开始看起,谢 ...
- openstack——Neutron基本架构详解
文章目录 一:Neutron基本架构 二:neutron --neutron-server详解 三:neutron--neutron-plugin插件 四:neutron--neutron agent ...
- OpenStack Neutron运行机制解析概要
问题导读: 1.有OpenVswitch为什么还会有Linux Bridge? 2.整个运行流程是怎样的? 3.什么是TAP设备? 自从开学以来,玩OpenStack也已经3个月了,这段时间主要把精力 ...
- openstack neutron相关命令出现异常HttpException: 503
打开环境突然发现openstack neutron相关命令都用不了了 [root@openstack21 xxxxxxx]# openstack network list HttpException: ...
- python openstack vpc互通_深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(二)-带宽控制...
在VPC功能实现第一篇中,简单介绍了一下VPC网络对租户间隔离能力的提升以及基于路由提供的一系列网络功能.在这一篇中,将继续介绍VPC网络中十分重要的一个内容:网络带宽的控制,共享以及分离. 首先是对 ...
最新文章
- 图像轮廓的提取和绘制
- wifi linux 驱动分析,Linux 下wifi 驱动开发(二)—— WiFi模块浅析
- c++心得之struct和class(结构体和类)
- 翻译软件(用百度的API实现)Python
- Oracle实例和服务知识点
- 动态规划爬楼梯(为什么到i级的方法=i-1级的方法+到i-2级的方法)
- ssh2的application.xml配置文件配置详解
- Emmet 文档下载,所有快捷键总结
- 三维视觉基础之世界坐标系、相机坐标系、图像坐标系和像素坐标系之间的转换关系
- 距离之和最小 V3 51Nod - 1110(带权中位数或者爆搜)
- 将Windows上的鼠标指针主题移植到Linux上
- 天龙八部3d最新服务器,天龙八部3D妙笔生花新服务器开启公告
- 程序员生活_程序员,请您不要老是熬夜
- Windows网络诊断和配置常用命令详解
- 机器学习之深度学习入门
- ROS系列教程三:roslaunch文件及参数服务器
- excel制作跨职能流程图_轻松做Visio跨职能流程图(泳道图)
- 彩色图像直方图均衡化
- Banner小组年会总结
- html 颜色镂空,【前端】canvas应该怎么做镂空(透明色)文字呢?
热门文章
- android gradle权威指南pdf_干货 | 携程 Android 10适配踩坑指南
- 复盘从一个监控主机到核心路由沦陷
- JVM插码之六:jacoco插码及问题“$jacocodata 属性 Method not found: is$jacocoData”
- 简单的JavaScript互斥锁
- 通过nginx配置文件抵御攻击
- SpringMVC学习笔记
- Vue学习(常用实例、脚手架搭建)-学习笔记
- 《数据库SQL实战》查找所有已经分配部门的员工的last_name和first_name
- 协同过滤——基于模型的算法
- RDD, DataFrame or Dataset