上文说到需要在 /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 (四)相关推荐

  1. 怎样写 OpenStack Neutron 的 Extension (三)

    通过上几章的介绍,我们现在的 myplugin 文件夹看上去应该是这样的: - neutron/ - plugins/ - myplugin/ - __init__.py - plugin.py - ...

  2. OpenStack Neutron浅析(四)

    传统网络到虚拟化网络的演进 传统网络: 虚拟网络: 布式虚拟网络: 单一平面网络到混合平面网络的演进 单一平面租户共享网络:所有租户共享一个网络(IP 地址池),只能存在单一网络类型(VLAN 或 F ...

  3. 带着问题了解Openstack Neutron安全组

    女主宣言 本文出自于ADDOPS团队,该文章作者李文新是360 HULK云平台容器化及虚拟化平台运维开发工程师,负责网络模块的设计与开发.本文是由他最近解决的一个Openstack Neutron安全 ...

  4. 深入理解 OpenStack Neutron:VXLAN

    深入理解 OpenStack Neutron:VXLAN 原创: 李宗标 网事如烟云 2017-02-01 3.8 VXLAN 终于用上了这张图: 老爷子,鸡年大吉! 好吧,我们言归正传!(老爷子说: ...

  5. 深度探索 OpenStack Neutron:Neutron 实现模型

    此文章源于鄙人微信公众号"标哥说天下" [上次发表了(1),这次就不发表(2)了,而是在(1)的基础上继续往下写.如果您已经看过(1),可以往下翻,从 4.2.3 小节开始看起,谢 ...

  6. openstack——Neutron基本架构详解

    文章目录 一:Neutron基本架构 二:neutron --neutron-server详解 三:neutron--neutron-plugin插件 四:neutron--neutron agent ...

  7. OpenStack Neutron运行机制解析概要

    问题导读: 1.有OpenVswitch为什么还会有Linux Bridge? 2.整个运行流程是怎样的? 3.什么是TAP设备? 自从开学以来,玩OpenStack也已经3个月了,这段时间主要把精力 ...

  8. openstack neutron相关命令出现异常HttpException: 503

    打开环境突然发现openstack neutron相关命令都用不了了 [root@openstack21 xxxxxxx]# openstack network list HttpException: ...

  9. python openstack vpc互通_深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(二)-带宽控制...

    在VPC功能实现第一篇中,简单介绍了一下VPC网络对租户间隔离能力的提升以及基于路由提供的一系列网络功能.在这一篇中,将继续介绍VPC网络中十分重要的一个内容:网络带宽的控制,共享以及分离. 首先是对 ...

最新文章

  1. 图像轮廓的提取和绘制
  2. wifi linux 驱动分析,Linux 下wifi 驱动开发(二)—— WiFi模块浅析
  3. c++心得之struct和class(结构体和类)
  4. 翻译软件(用百度的API实现)Python
  5. Oracle实例和服务知识点
  6. 动态规划爬楼梯(为什么到i级的方法=i-1级的方法+到i-2级的方法)
  7. ssh2的application.xml配置文件配置详解
  8. Emmet 文档下载,所有快捷键总结
  9. 三维视觉基础之世界坐标系、相机坐标系、图像坐标系和像素坐标系之间的转换关系
  10. 距离之和最小 V3 51Nod - 1110(带权中位数或者爆搜)
  11. 将Windows上的鼠标指针主题移植到Linux上
  12. 天龙八部3d最新服务器,天龙八部3D妙笔生花新服务器开启公告
  13. 程序员生活_程序员,请您不要老是熬夜
  14. Windows网络诊断和配置常用命令详解
  15. 机器学习之深度学习入门
  16. ROS系列教程三:roslaunch文件及参数服务器
  17. excel制作跨职能流程图_轻松做Visio跨职能流程图(泳道图)
  18. 彩色图像直方图均衡化
  19. Banner小组年会总结
  20. html 颜色镂空,【前端】canvas应该怎么做镂空(透明色)文字呢?

热门文章

  1. android gradle权威指南pdf_干货 | 携程 Android 10适配踩坑指南
  2. 复盘从一个监控主机到核心路由沦陷
  3. JVM插码之六:jacoco插码及问题“$jacocodata 属性 Method not found: is$jacocoData”
  4. 简单的JavaScript互斥锁
  5. 通过nginx配置文件抵御攻击
  6. SpringMVC学习笔记
  7. Vue学习(常用实例、脚手架搭建)-学习笔记
  8. 《数据库SQL实战》查找所有已经分配部门的员工的last_name和first_name
  9. 协同过滤——基于模型的算法
  10. RDD, DataFrame or Dataset