怎样写 OpenStack Neutron 的 Extension (二)

接着之前一篇文章,再来谈谈 Extension 的具体实现问题。我使用的是本地数据库加远程API调用的方法,所以先要定义一下数据库中 myextension 如何存储。首先,我们可以在自己的 plugin 根目录下新建一个 db 文件夹,以及三个文件:

- neutron/

  - plugins/

    - myplugin/

      - __init__.py

      - plugin.py

      - extensions/

      - db/

        - __init__.py

        - db.py

        - models.py

db.py 用来存放数据库的 wrapper,提供一些读写数据库的方法;而 models.py 直接定义 myextension 的那些属性如何在数据库中存储。下面是 models.py 的一个例子:

import sqlalchemy as sa

from neutron.db import model_base
from neutron.db import models_v2


class MyExtension(model_base.BASEV2, models_v2.HasId,
                  model_v2.HasTenant):
    ''' Defines the data model for my extension '''
    name = sa.Column(sa.String(255), nullable=False)

db.py 的实现可以参照 db_base_plugin_v2.py 中的实现方式。然后在自己的 plugin.py 中实现 myextension 的五个操作: CREATE, UPDATE, GET, SHOW,  和 DELETE。到这里,myextension 的后台操作就全了。

但是这样还不够,因为我们还需要一些方式来从前台发布关于 myextension 的命令,使后台的 plugin controller 可以接收到,并进行相应的操作。这就需要修改 neutronclient 的相应代码,实现通过 CLI 的交互。这部分内容会在下一篇文章中进行介绍。

        

posted @ 2014-08-12 02:39  云耳  阅读(1817)  评论(0编辑  收藏  举报