openstack neutron网络模块分析(三)--- 新增plugin

neutron添加Plugin

从前几篇的文章中我可以知道neutron plugin分core plugin和service plugin两种,而core plugin来说我们一般不添加,大部分都是添加service plugin,所以,这篇文章主要讲述怎么添加一个service plugin

service plugin

代码目录:/neutron/services
在上面的目录下 新增一个文件夹,这里命名为testing
目前代码目录:/neutorn/service/testing
这个文件夹要做成一个模块,所以要新建一个 _ init _.py文件。还有一个就是plugin实现功能文件testing_plugin.py
所以 现在testing文件夹下面最基本的要有上面提到的两个文件。

testing_plugin.py文件的实现:

    import random
    import time

    from neutron.db import api as db_api
    from neutron.services import service_base
    from neutron.db import testing_db
    from oslo_db import exception as db_exc
    from oslo_log import log as logging
    from sqlalchemy.orm import session as se
    from neutron.plugins.common import constants

    LOG = logging.getLogger(__name__)


    class TestingPlugin(testing_db.TestdbMinxin,service_base.ServicePluginBase):

        supported_extension_aliases = ['testing']
        path_prefix = "/testing"

        def get_plugin_description(self):
            return "testing plugin"


        @classmethod
        def get_plugin_type(cls):
            return constants.TESTING

~

类名就与文件名相似,去掉下划线,组合单词首字母大写

如果要对数据库有操作,就要在/neutron/db/目录下新建一个db文件,我这里是test_db.py, 里面有个TestdbMinxin的类,这些后面讲extension的时候会讲到,详细会在下篇文章讲解。

supported_ extension_aliases = [“network-ip-availability”]

上面这行代码的意思就是本plugin支持哪些extension
这个可有可无

extension

这里还有在/neutron/extension目录下创建一个py文件的,这个文件的功能就是要做到创建controller了,具体的放在下一篇文章中讲解。

entry-point

service plugin都是从entry-point文件中加载的,所以要添加service plugin就要在这个文件下添加内容

 [neutron.service_plugins]
    auto_allocate = neutron.services.auto_allocate.plugin:Plugin
    dummy = neutron.tests.unit.dummy_plugin:DummyServicePlugin
    flavors = neutron.services.flavors.flavors_plugin:FlavorsPlugin
    loki = neutron.services.loki.loki_plugin:LokiPlugin
    metering = neutron.services.metering.metering_plugin:MeteringPlugin
    network_ip_availability = neutron.services.network_ip_availability.plugin:NetworkIPAvailabilityPlugin
    qos = neutron.services.qos.qos_plugin:QoSPlugin
    revisions = neutron.services.revisions.revision_plugin:RevisionPlugin
    router = neutron.services.l3_router.l3_router_plugin:L3RouterPlugin
    segments = neutron.services.segments.plugin:Plugin
    tag = neutron.services.tag.tag_plugin:TagPlugin
    timestamp = neutron.services.timestamp.timestamp_plugin:TimeStampPlugin
    trunk = neutron.services.trunk.plugin:TrunkPlugin
    testing = neutron.services.testing.testing_plugin.TestingPlugin

将我们的testing添加到entry_point.txt的[neutron.service_plugins]的最后面

最后重启neutron-server服务就能看到testing的extension加载了
查看neutron-server.log,发现并没有plugin加载,怎么回事??

细心看过上一篇的同学可能知道问题所在了,
加载plugin还需要修改一个地方
方法一
代码目录:/neutron/plugins/common/constants.py

 # Neutron well-known service type constants:
    DUMMY = "DUMMY"
    LOADBALANCER = "LOADBALANCER"
    LOADBALANCERV2 = "LOADBALANCERV2"
    FIREWALL = "FIREWALL"
    VPN = "VPN"
    METERING = "METERING"
    FLAVORS = "FLAVORS"
    QOS = "QOS"
    TESTING = "TESTING"

    # Maps extension alias to service type that
    # can be implemented by the core plugin.
    EXT_TO_SERVICE_MAPPING = {
        'dummy': DUMMY,
        'lbaas': LOADBALANCER,
        'lbaasv2': LOADBALANCERV2,
        'fwaas': FIREWALL,
        'aas': VPN,
        'metering': METERING,
        'router': constants.L3,
        'qos': QOS,
        'testing': TESTING
    }

    # Maps default service plugins entry points to their extension aliases
    DEFAULT_SERVICE_PLUGINS = {
        'auto_allocate': 'auto-allocated-topology',
        'tag': 'tag',
        'timestamp': 'timestamp',
        'network_ip_availability': 'network-ip-availability',
        'flavors': 'flavors',
        'revisions': 'revisions',
        'testing' : 'testing',
    }

在DEFAULT_SERVICE_PLUGINS后面加上我们的testing,要与entry_points.txt文件的名字一样。

方法二
修改neutron.conf的配置文件,新增service plugin

service_plugins = neutron.services.l3_router.l3_router_plugin.L3RouterPlugin,
neutron.services.metering.metering_plugin.MeteringPlugin,neutron.services.testing.testing_plugin.TestingPlugin

后面再看看日志就有了

这一篇讲了如何加plugin,在代码上面还有一个extension在,这个会在下一篇讲解,如何添加extension

你可能感兴趣的:(openstack,neutron)