zoukankan      html  css  js  c++  java
  • 怎样写 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。这部分内容会在下一篇文章中进行介绍。

    ----------------------------------------------------------------
    作者:好大一片云
    博客地址:http://www.cnblogs.com/zhutianshi/
    转载声明:可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作!
    Creative Commons License
    This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
  • 相关阅读:
    当老板如何带团队?
    创业者第一法宝-了解自己
    交流才能交易,交易才能交心
    集合框架
    MySQL一些命令语法
    JS组成整理
    git中可以pull但是push提示Everything up-to-date的情况
    循环判断以及文件的使用--练习1
    Hello World !
    linux文件权限修改
  • 原文地址:https://www.cnblogs.com/zhutianshi/p/3911582.html
Copyright © 2011-2022 走看看