Neutron如何开发插件?
来源:互联网 发布:如何用备忘录编程 编辑:程序博客网 时间:2024/04/19 18:50
Neutron结构?
(http://blog.csdn.net/batmancn/article/details/49737981)基本是控制节点,安装包括neutron-server在内的openstack服务;网络节点,安装neutron-*-plugin-agent;计算节点,安装neutron-l2-plugin-agent。
Neutron-server可以理解为类似WebOVS的基于RestAPI结构的BS系统,其API主要是创建子网,创建端口等。pluging是在网络节点上实现网络功能的进程,他们之间的通信可能是jsonrpc。
如何添加plugin?
plugin一般指需要OVS完成任务的基本网络结构,例如Network、Port、Subnet。
1. 在plugin下创建自己的文件夹,结构如下。并实现plugin.py。
- neutron
- plugins
- myplugin
- __init__.py
- plugins
- myplugin
- __init__.py
- plugin.py
2. 在 Neutron中注册plugin。在neutron egg info文件夹中的entry_point.txt文件中,加上“myplugin = neutron.plugins.myplugin.plugin:MyPlugin”。然后在/etc/neutron/neutron.conf中设置“core_plugin = myplugin”。
3. plugin.py中的实现就是按照RESTAPI实现其中的方法,例如“create_network”等。
如何添加extension?
extension指提供网络额外功能,不需要OVS参与的,例如router、DHCP等。
添加plugin只能实现Network、Port、Subnet三种资源的增删查改,如果想实现其他的(例如实现gateway)就需要采用扩展的方式,neutron中已经定义了extension在/neutron/extension中。写extension的步骤如下:
1. 创建如下结构的文件
- neutron/
- plugins/
- myplugin/
- __init__.py
- plugin.py
- extensions/
- __init__.py
- plugins/
- myplugin/
- __init__.py
- plugin.py
- extensions/
- __init__.py
- myextension.py
2. 在myextension.py中定义RESOURCE_ATTRIBUTE_MAP,主要是指出对myextension类属性可以做增删查改中的那些操作。
RESOURCE_ATTRIBUTE_MAP = {
'myextensions': {
'id': {'allow_post': False, 'allow_put': False,
'is_visible': True},
'name': {'allow_post': True, 'allow_put': True,
'is_visible': True},
'tenant_id': {'allow_post': True, 'allow_put': False,
'validate': {'type:string': None},
'required_by_policy': True,
'is_visible': True}
}
'myextensions': {
'id': {'allow_post': False, 'allow_put': False,
'is_visible': True},
'name': {'allow_post': True, 'allow_put': True,
'is_visible': True},
'tenant_id': {'allow_post': True, 'allow_put': False,
'validate': {'type:string': None},
'required_by_policy': True,
'is_visible': True}
}
}
3. 在myextension.py中定义Myextension类
4. 配置/etc/neutron/neutron.conf文件,“api_extensions_path = /usr/lib/python2.7/dist-packages/neutron/plugins/myplugin/extensions”
5. 在myplugin(注意不是myextension)中告诉neutron插件支持扩展,“supported_extension_aliases = ['my-extensions']”。
6. 定义数据库,类似OVS中的数据库一样,用于存储下发的配置。需要实现myextension的五个操作,CREATE、UPDATE、GET、SHOW、DELETE。
如何实现neutron client?
类似OVS中的client,neutron client用于使用CLI方式访问neutron extension或者plugin。
1. 首先配置neutronclient/shell.py,注册需要的命令,与OVS类似,实现命令的函数体即可。
from neutronclient.neutron.v2_0.myextension import extension as my_ext
COMMAND_V2 = {
'net-list': network.ListNetwork,
'net-external-list': network.ListExternalNetwork,
'net-show': network.ShowNetwork,
'net-create': network.CreateNetwork,
'net-delete': network.DeleteNetwork,
'net-update': network.UpdateNetwork,
...
'myextension-list': my_ext.ListExtension,
'myextension-show': my_ext.ShowExtension,
'myextension-create': my_ext.CreateExtension,
'myextension-delete': my_ext.DeleteExtension,
'myextension-update': my_ext.UpdateExtension,
...
COMMAND_V2 = {
'net-list': network.ListNetwork,
'net-external-list': network.ListExternalNetwork,
'net-show': network.ShowNetwork,
'net-create': network.CreateNetwork,
'net-delete': network.DeleteNetwork,
'net-update': network.UpdateNetwork,
...
'myextension-list': my_ext.ListExtension,
'myextension-show': my_ext.ShowExtension,
'myextension-create': my_ext.CreateExtension,
'myextension-delete': my_ext.DeleteExtension,
'myextension-update': my_ext.UpdateExtension,
...
}
2. 在neutronclient/neutron/v2_0中定义myextension
- neutronclient/
- neutron/
- v2_0/
- myextension/
- __init__.py
- neutron/
- v2_0/
- myextension/
- __init__.py
- extension.py
3. 在extension.py中定义五个class:List/Show/Create/Delete/UpdateExtension,具体可以参考其他文件。
4. 在Horizon上显示见下节。
如何在horizon上显示?
horizon其实是Django工程的一个app,而且与webpy也很像,原生支持restAPI。
0 0
- Neutron如何开发插件?
- 如何自定义neutron网络
- 如何开发 Eclipse 插件
- 如何开发Xcode插件
- 如何开发jquery插件
- 如何开发Discuz插件(二):文库插件
- neutron的插件加载机制(未完待续)
- neutron
- Neutron
- 如何开发一个Joomla插件
- 如何开发持续集成插件
- 如何开发一个Joomla插件
- 如何开发一个jquery插件
- 如何开发Discuz插件(一)
- 如何开发Ionic插件--android
- Neutron 理解 (8): Neutron 是如何实现虚机防火墙的 [How Neutron Implements Security Group]
- Neutron 理解 (8): Neutron 是如何实现虚机防火墙的 [How Neutron Implements Security Group]
- word2007插件开发经验备忘1--如何开发word插件
- moveTaskToBack退后台
- keilc51编程中 发现一个中断函数和中断被调函数的重要关系。
- LDAP注入与防御剖析
- POJ1815 Friendship(求最小割点 dinic)
- Cydia Substrate是一个代码修改平台
- Neutron如何开发插件?
- group by和distinct的取舍
- CentOS 6.5系统中安装配置MySQL数据库
- Linux 时间相关
- golang语法总结(十二):循环语句
- AndroidStudio怎样导入jar包
- windows上安装openfire
- Android Power management的层次结构。
- Mapreduce setup和clearup解析