h0945634 发表于 2015-4-11 15:17:45

怎样写 OpenStack Neutron 的 Extension (三)

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



from neutron import neutron_plugin_base_v2

class MyPlugin(neutron_plugin_base_v2.NeutronPluginBaseV2):
def __init__(self):
pass
[...]
  
  def create_myextension(self, context, myextension):
return myextension
def update_myextension(self, context, id, myextension):
return myextension
def get_myextension(self, context, id, fields=None):
myextension = {}
return myextension
def get_myextensions(self, context, filters=None, fields=None):
myextensions = {}
return myextensions
def delete_myextension(self, context, id):
return id
 
  [...]
  这些方法需要进一步的定义来做一些有实际意义的事情,这里我只是做一个最简单的举例说明。在有了上述这些文件之后,其实整个 plugin 以及 extension 的后台就已经搞定了,只是这个时候还没有任何途径来使用这些定义好的方法。所以接下来我们需要在 neutronclient 中增加一些对应的方法。
  neutronclient 是一个 CLI 客户端,可以用来与 neutron 互动。每一个 OpenStack 的 project 如 nova,neutron 等都有一个类似的自己的 CLI client。首先,我们需要在 CLI 中显示关于 myextension 的命令,这个可以在 neutronclient/shell.py 中设置。这个文件有一个属性叫做 COMMAND_V2,所有可以使用的命令都以 key-value pair 的形式存储在这个变量中:



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,
  ...
  }

  下一步就需要去 neutronclient/neutron/v2_0 中新建一个文件夹 myextension,并在其中新建两个文件: __init__.py 和 extension.py,其结构如下:
  - neutronclient/
  - neutron/
  - v2_0/
  - myextension/
  - __init__.py
  - extension.py
  然后再 extension.py 中分别定义五个class:List/Show/Create/Delete/UpdateExtension。这部分内容会在下一篇文章中进行介绍。
页: [1]
查看完整版本: 怎样写 OpenStack Neutron 的 Extension (三)