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
      - 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
        - 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}
        }
    }
     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,
  ...
  }
     2. 在neutronclient/neutron/v2_0中定义myextension
- neutronclient/
  - 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
原创粉丝点击