diff --git a/dragonflow/cli/df_db.py b/dragonflow/cli/df_db.py index 909b89808..60f0a340f 100644 --- a/dragonflow/cli/df_db.py +++ b/dragonflow/cli/df_db.py @@ -16,10 +16,10 @@ import sys from neutron.common import config as common_config from oslo_config import cfg from oslo_serialization import jsonutils -from oslo_utils import importutils from dragonflow.common import common_params from dragonflow.common import exceptions as df_exceptions +from dragonflow.common import utils as df_utils cfg.CONF.register_opts(common_params.df_opts, 'df') @@ -134,8 +134,9 @@ def main(): return common_config.init(['--config-file', '/etc/neutron/neutron.conf']) - db_driver_class = importutils.import_class(cfg.CONF.df.nb_db_class) - db_driver = db_driver_class() + db_driver = df_utils.load_driver( + cfg.CONF.df.nb_db_class, + df_utils.DF_NB_DB_DRIVER_NAMESPACE) db_driver.initialize(db_ip=cfg.CONF.df.remote_db_ip, db_port=cfg.CONF.df.remote_db_port, config=cfg.CONF.df) diff --git a/dragonflow/common/utils.py b/dragonflow/common/utils.py index 74346571a..cf9364a51 100644 --- a/dragonflow/common/utils.py +++ b/dragonflow/common/utils.py @@ -27,6 +27,7 @@ from stevedore import driver from dragonflow._i18n import _, _LE DF_PUBSUB_DRIVER_NAMESPACE = 'dragonflow.pubsub_driver' +DF_NB_DB_DRIVER_NAMESPACE = 'dragonflow.nb_db_driver' LOG = logging.getLogger(__name__) diff --git a/dragonflow/controller/df_local_controller.py b/dragonflow/controller/df_local_controller.py index 030305b99..9c09e4974 100644 --- a/dragonflow/controller/df_local_controller.py +++ b/dragonflow/controller/df_local_controller.py @@ -21,12 +21,12 @@ from neutron.agent.common import config from neutron.common import config as common_config from oslo_config import cfg from oslo_log import log -from oslo_utils import importutils from ryu.base.app_manager import AppManager from dragonflow._i18n import _LI, _LW from dragonflow.common import common_params from dragonflow.common import constants +from dragonflow.common import utils as df_utils from dragonflow.controller.ryu_base_app import RyuDFAdapter from dragonflow.controller.topology import Topology from dragonflow.db import api_nb @@ -49,9 +49,11 @@ class DfLocalController(object): self.ip = cfg.CONF.df.local_ip self.tunnel_type = cfg.CONF.df.tunnel_type self.sync_finished = False - nb_driver_class = importutils.import_class(cfg.CONF.df.nb_db_class) + nb_driver = df_utils.load_driver( + cfg.CONF.df.nb_db_class, + df_utils.DF_NB_DB_DRIVER_NAMESPACE) self.nb_api = api_nb.NbApi( - nb_driver_class(), + nb_driver, use_pubsub=cfg.CONF.df.enable_df_pub_sub) self.vswitch_api = ovsdb_vswitch_impl.OvsdbSwitchApi( self.ip, self.nb_api) diff --git a/dragonflow/controller/df_publisher_service.py b/dragonflow/controller/df_publisher_service.py index ffc484193..d965e2f5b 100644 --- a/dragonflow/controller/df_publisher_service.py +++ b/dragonflow/controller/df_publisher_service.py @@ -21,7 +21,6 @@ from neutron.common import config as common_config from oslo_config import cfg from oslo_log import log as logging from oslo_serialization import jsonutils -from oslo_utils import importutils from dragonflow._i18n import _LW from dragonflow.common import common_params @@ -39,8 +38,9 @@ class PublisherService(object): self._queue = Queue() self.publisher = self._get_publisher() self.multiproc_subscriber = self._get_multiproc_subscriber() - nb_driver_class = importutils.import_class(cfg.CONF.df.nb_db_class) - self.db = nb_driver_class() + self.db = df_utils.load_driver( + cfg.CONF.df.nb_db_class, + df_utils.DF_NB_DB_DRIVER_NAMESPACE) self.uuid = pub_sub_api.generate_publisher_uuid() self._rate_limit = df_utils.RateLimiter( cfg.CONF.df.publisher_rate_limit_count, diff --git a/dragonflow/neutron/ml2/mech_driver.py b/dragonflow/neutron/ml2/mech_driver.py index 60f8326cd..1d8f634a8 100644 --- a/dragonflow/neutron/ml2/mech_driver.py +++ b/dragonflow/neutron/ml2/mech_driver.py @@ -24,13 +24,13 @@ from neutron.plugins.ml2 import models from neutron_lib import constants as n_const from oslo_config import cfg from oslo_log import log -from oslo_utils import importutils from dragonflow._i18n import _LI from dragonflow.common import common_params from dragonflow.common import constants as df_common_const from dragonflow.common import exceptions as df_exceptions from dragonflow.common import extensions +from dragonflow.common import utils as df_utils from dragonflow.db import api_nb from dragonflow.db.neutron import lockedobjects_db as lock_db from dragonflow.db.neutron import versionobjects_db as version_db @@ -57,9 +57,11 @@ class DFMechDriver(driver_api.MechanismDriver): self.vif_type = portbindings.VIF_TYPE_OVS self._set_base_port_binding() - nb_driver_class = importutils.import_class(cfg.CONF.df.nb_db_class) + nb_driver = df_utils.load_driver( + cfg.CONF.df.nb_db_class, + df_utils.DF_NB_DB_DRIVER_NAMESPACE) self.nb_api = api_nb.NbApi( - nb_driver_class(), + nb_driver, use_pubsub=cfg.CONF.df.enable_df_pub_sub, is_neutron_server=True) self.nb_api.initialize(db_ip=cfg.CONF.df.remote_db_ip, diff --git a/dragonflow/neutron/plugin.py b/dragonflow/neutron/plugin.py index ffa7b029e..a8350b940 100644 --- a/dragonflow/neutron/plugin.py +++ b/dragonflow/neutron/plugin.py @@ -60,6 +60,7 @@ from dragonflow.common import common_params from dragonflow.common import constants as df_common_const from dragonflow.common import exceptions as df_exceptions from dragonflow.common import extensions +from dragonflow.common import utils as df_utils from dragonflow.db import api_nb from dragonflow.db.neutron import lockedobjects_db as lock_db from dragonflow.db.neutron import versionobjects_db as version_db @@ -130,10 +131,12 @@ class DFPlugin(db_base_plugin_v2.NeutronDbPluginV2, self._start_rpc_notifiers() def post_fork_initialize(self, resource, event, trigger, **kwargs): - nb_driver_class = importutils.import_class(cfg.CONF.df.nb_db_class) + nb_driver = df_utils.load_driver( + cfg.CONF.df.nb_db_class, + df_utils.DF_NB_DB_DRIVER_NAMESPACE) self.nb_api = api_nb.NbApi( - nb_driver_class(), + nb_driver, use_pubsub=cfg.CONF.df.enable_df_pub_sub, is_neutron_server=True) self.nb_api.initialize(db_ip=cfg.CONF.df.remote_db_ip, diff --git a/dragonflow/tests/fullstack/test_base.py b/dragonflow/tests/fullstack/test_base.py index 170c21be3..f0ed7d0da 100644 --- a/dragonflow/tests/fullstack/test_base.py +++ b/dragonflow/tests/fullstack/test_base.py @@ -15,9 +15,9 @@ from neutron.common import config as common_config from neutronclient.neutron import client import os_client_config from oslo_config import cfg -from oslo_utils import importutils from dragonflow.common import common_params +from dragonflow.common import utils as df_utils from dragonflow.db import api_nb from dragonflow.tests import base from dragonflow.tests.common import app_testing_objects as test_objects @@ -50,8 +50,10 @@ class DFTestBase(base.BaseTestCase): self.conf = cfg.CONF.df self.integration_bridge = self.conf.integration_bridge - db_driver_class = importutils.import_class(self.conf.nb_db_class) - self.nb_api = api_nb.NbApi(db_driver_class()) + db_driver = df_utils.load_driver( + cfg.CONF.df.nb_db_class, + df_utils.DF_NB_DB_DRIVER_NAMESPACE) + self.nb_api = api_nb.NbApi(db_driver) self.nb_api.initialize(db_ip=self.conf.remote_db_ip, db_port=self.conf.remote_db_port) self.local_ip = self.conf.local_ip diff --git a/setup.cfg b/setup.cfg index 7fe0b5be5..82086c3c3 100644 --- a/setup.cfg +++ b/setup.cfg @@ -57,5 +57,10 @@ dragonflow.pubsub_driver = zmq_pubsub_driver = dragonflow.db.pubsub_drivers.zmq_pubsub_driver:ZMQPubSub zmq_pubsub_multiproc_driver = dragonflow.db.pubsub_drivers.zmq_pubsub_driver:ZMQPubSubMultiproc redis_db_pubsub_driver = dragonflow.db.pubsub_drivers.redis_db_pubsub_driver:RedisPubSub +dragonflow.nb_db_driver = + etcd_nb_db_driver = dragonflow.db.drivers.etcd_db_driver:EtcdDbDriver + ramcloud_nb_db_driver = dragonflow.db.drivers.ramcloud_db_driver:RamCloudDbDriver + zookeeper_nb_db_driver = dragonflow.db.drivers.zookeeper_db_driver:ZookeeperDbDriver + redis_nb_db_driver = dragonflow.db.drivers.redis_db_driver:RedisDbDriver neutron.service_plugins = df-l3 = dragonflow.neutron.services.l3_router_plugin:DFL3RouterPlugin