Allow NSX plugins to work without FWaaS

When neutrion FWaaS is not configured, the NSX plugins should
come up and work even if the neutron-fwaas code is not installed.
This patch adds try/except on fwaas imports, and some mocks to
allow it.

Change-Id: I44895c1ded046668c56d559b47a69c44102d2f04
This commit is contained in:
Adit Sarfaty 2018-04-02 14:42:08 +03:00
parent 7c3f1e63df
commit f7318af8a0
11 changed files with 121 additions and 21 deletions

View File

@ -18,17 +18,23 @@ from oslo_log import log as logging
from neutron.agent.l3 import router_info from neutron.agent.l3 import router_info
from neutron.common import config as neutron_config # noqa from neutron.common import config as neutron_config # noqa
from neutron_fwaas.db.firewall import firewall_db # noqa
from neutron_fwaas.db.firewall import firewall_router_insertion_db \
as fw_r_ins_db
from neutron_fwaas.services.firewall.agents.l3reference \
import firewall_l3_agent
from neutron_lib import constants as nl_constants from neutron_lib import constants as nl_constants
from neutron_lib import context as n_context from neutron_lib import context as n_context
from neutron_lib.plugins import directory from neutron_lib.plugins import directory
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
try:
from neutron_fwaas.db.firewall import firewall_db # noqa
from neutron_fwaas.db.firewall import firewall_router_insertion_db \
as fw_r_ins_db
from neutron_fwaas.services.firewall.agents.l3reference \
import firewall_l3_agent
except ImportError:
# FWaaS project no found
from vmware_nsx.services.fwaas.common import fwaas_mocks \
as firewall_l3_agent
class NsxFwaasCallbacks(firewall_l3_agent.L3WithFWaaS): class NsxFwaasCallbacks(firewall_l3_agent.L3WithFWaaS):
"""Common NSX RPC callbacks for Firewall As A Service - V1.""" """Common NSX RPC callbacks for Firewall As A Service - V1."""

View File

@ -18,15 +18,21 @@ from oslo_log import log as logging
from neutron.agent.l3 import router_info from neutron.agent.l3 import router_info
from neutron.common import config as neutron_config # noqa from neutron.common import config as neutron_config # noqa
from neutron_fwaas.db.firewall.v2 import firewall_db_v2
from neutron_fwaas.services.firewall.agents.l3reference \
import firewall_l3_agent_v2
from neutron_lib import constants as nl_constants from neutron_lib import constants as nl_constants
from neutron_lib import context as n_context from neutron_lib import context as n_context
from neutron_lib.plugins import directory from neutron_lib.plugins import directory
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
try:
from neutron_fwaas.db.firewall.v2 import firewall_db_v2
from neutron_fwaas.services.firewall.agents.l3reference \
import firewall_l3_agent_v2
except ImportError:
# FWaaS project no found
from vmware_nsx.services.fwaas.common import fwaas_mocks \
as firewall_l3_agent_v2
class DummyAgentApi(object): class DummyAgentApi(object):
def is_router_in_namespace(self, router_id): def is_router_in_namespace(self, router_id):

View File

@ -0,0 +1,41 @@
# Copyright 2018 VMware, Inc.
# All Rights Reserved
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
# This file contains FWaaS mocks, to allow the vmware nsx plugins to work when
# FWaaS code does not exist, and FWaaS is not configured in neutron
FIREWALL = 'FIREWALL'
FIREWALL_V2 = 'FIREWALL_V2'
class L3WithFWaaS(object):
def __init__(self, **kwargs):
self.fwaas_enabled = False
class FwaasDriverBase(object):
pass
class FirewallPlugin(object):
pass
class FirewallPluginV2(object):
pass
class FirewallCallbacks(object):
pass

View File

@ -13,9 +13,15 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_fwaas.common import fwaas_constants
from neutron_lib.plugins import directory from neutron_lib.plugins import directory
try:
from neutron_fwaas.common import fwaas_constants
except ImportError:
# FWaaS project no found
from vmware_nsx.services.fwaas.common import fwaas_mocks \
as fwaas_constants
def is_fwaas_v1_plugin_enabled(): def is_fwaas_v1_plugin_enabled():
fwaas_plugin = directory.get_plugin(fwaas_constants.FIREWALL) fwaas_plugin = directory.get_plugin(fwaas_constants.FIREWALL)

View File

@ -16,7 +16,6 @@
from oslo_log import helpers as log_helpers from oslo_log import helpers as log_helpers
from oslo_log import log as logging from oslo_log import log as logging
from neutron_fwaas.services.firewall.drivers import fwaas_base
from neutron_lib.exceptions import firewall_v1 as exceptions from neutron_lib.exceptions import firewall_v1 as exceptions
from vmware_nsx.extensions import projectpluginmap from vmware_nsx.extensions import projectpluginmap
@ -27,6 +26,13 @@ from vmware_nsx.services.fwaas.nsx_v3 import edge_fwaas_driver_v1 as t_driver
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
FWAAS_DRIVER_NAME = 'FwaaS V1 NSX-TV driver' FWAAS_DRIVER_NAME = 'FwaaS V1 NSX-TV driver'
try:
from neutron_fwaas.services.firewall.drivers import fwaas_base
except ImportError:
# FWaaS project no found
from vmware_nsx.services.fwaas.common import fwaas_mocks \
as fwaas_base
class EdgeFwaasTVDriverV1(fwaas_base.FwaasDriverBase): class EdgeFwaasTVDriverV1(fwaas_base.FwaasDriverBase):
"""NSX-TV driver for Firewall As A Service - V1. """NSX-TV driver for Firewall As A Service - V1.

View File

@ -16,7 +16,6 @@
from oslo_log import helpers as log_helpers from oslo_log import helpers as log_helpers
from oslo_log import log as logging from oslo_log import log as logging
from neutron_fwaas.services.firewall.drivers import fwaas_base_v2
from neutron_lib.exceptions import firewall_v2 as exceptions from neutron_lib.exceptions import firewall_v2 as exceptions
from vmware_nsx.extensions import projectpluginmap from vmware_nsx.extensions import projectpluginmap
@ -26,6 +25,13 @@ from vmware_nsx.services.fwaas.nsx_v3 import edge_fwaas_driver_v2 as t_driver
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
FWAAS_DRIVER_NAME = 'FwaaS V2 NSX-TV driver' FWAAS_DRIVER_NAME = 'FwaaS V2 NSX-TV driver'
try:
from neutron_fwaas.services.firewall.drivers import fwaas_base_v2
except ImportError:
# FWaaS project no found
from vmware_nsx.services.fwaas.common import fwaas_mocks \
as fwaas_base_v2
class EdgeFwaasTVDriverV2(fwaas_base_v2.FwaasDriverBase): class EdgeFwaasTVDriverV2(fwaas_base_v2.FwaasDriverBase):
"""NSX-TV driver for Firewall As A Service - V2. """NSX-TV driver for Firewall As A Service - V2.

View File

@ -16,10 +16,15 @@
from neutron_lib import exceptions as n_exc from neutron_lib import exceptions as n_exc
from neutron_lib.plugins import directory from neutron_lib.plugins import directory
from neutron_fwaas.services.firewall import fwaas_plugin
from vmware_nsx.plugins.nsx import utils as tvd_utils from vmware_nsx.plugins.nsx import utils as tvd_utils
try:
from neutron_fwaas.services.firewall import fwaas_plugin
except ImportError:
# FWaaS project no found
from vmware_nsx.services.fwaas.common import fwaas_mocks \
as fwaas_plugin
@tvd_utils.filter_plugins @tvd_utils.filter_plugins
class FwaasTVPluginV1(fwaas_plugin.FirewallPlugin): class FwaasTVPluginV1(fwaas_plugin.FirewallPlugin):

View File

@ -13,10 +13,15 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_fwaas.services.firewall import fwaas_plugin_v2
from vmware_nsx.plugins.nsx import utils as tvd_utils from vmware_nsx.plugins.nsx import utils as tvd_utils
try:
from neutron_fwaas.services.firewall import fwaas_plugin_v2
except ImportError:
# FWaaS project no found
from vmware_nsx.services.fwaas.common import fwaas_mocks \
as fwaas_plugin_v2
@tvd_utils.filter_plugins @tvd_utils.filter_plugins
class FwaasTVPluginV2(fwaas_plugin_v2.FirewallPluginV2): class FwaasTVPluginV2(fwaas_plugin_v2.FirewallPluginV2):

View File

@ -19,8 +19,6 @@ from neutron_lib.plugins import directory
from oslo_log import helpers as log_helpers from oslo_log import helpers as log_helpers
from oslo_log import log as logging from oslo_log import log as logging
from neutron_fwaas.services.firewall.drivers import fwaas_base
from vmware_nsx.common import locking from vmware_nsx.common import locking
from vmware_nsx.extensions import projectpluginmap from vmware_nsx.extensions import projectpluginmap
from vmware_nsx.plugins.nsx_v.vshield import edge_utils from vmware_nsx.plugins.nsx_v.vshield import edge_utils
@ -29,6 +27,13 @@ LOG = logging.getLogger(__name__)
FWAAS_DRIVER_NAME = 'Fwaas V1 NSX-V driver' FWAAS_DRIVER_NAME = 'Fwaas V1 NSX-V driver'
RULE_NAME_PREFIX = 'Fwaas-' RULE_NAME_PREFIX = 'Fwaas-'
try:
from neutron_fwaas.services.firewall.drivers import fwaas_base
except ImportError:
# FWaaS project no found
from vmware_nsx.services.fwaas.common import fwaas_mocks \
as fwaas_base
class EdgeFwaasDriver(fwaas_base.FwaasDriverBase): class EdgeFwaasDriver(fwaas_base.FwaasDriverBase):
"""NSX-V driver for Firewall As A Service - V1.""" """NSX-V driver for Firewall As A Service - V1."""

View File

@ -15,7 +15,6 @@
import netaddr import netaddr
from neutron_fwaas.services.firewall.drivers import fwaas_base
from neutron_lib.api.definitions import constants as fwaas_consts from neutron_lib.api.definitions import constants as fwaas_consts
from neutron_lib.callbacks import events from neutron_lib.callbacks import events
from neutron_lib.callbacks import registry from neutron_lib.callbacks import registry
@ -30,6 +29,13 @@ LOG = logging.getLogger(__name__)
RULE_NAME_PREFIX = 'Fwaas-' RULE_NAME_PREFIX = 'Fwaas-'
DEFAULT_RULE_NAME = 'Default LR Layer3 Rule' DEFAULT_RULE_NAME = 'Default LR Layer3 Rule'
try:
from neutron_fwaas.services.firewall.drivers import fwaas_base
except ImportError:
# FWaaS project no found
from vmware_nsx.services.fwaas.common import fwaas_mocks \
as fwaas_base
class CommonEdgeFwaasV3Driver(fwaas_base.FwaasDriverBase): class CommonEdgeFwaasV3Driver(fwaas_base.FwaasDriverBase):
"""Base class for NSX-V3 driver for Firewall As A Service - V1 & V2.""" """Base class for NSX-V3 driver for Firewall As A Service - V1 & V2."""

View File

@ -22,9 +22,6 @@ from neutron_lib import context
from neutron_lib.plugins import constants as const from neutron_lib.plugins import constants as const
from neutron_lib.plugins import directory from neutron_lib.plugins import directory
from neutron_fwaas.services.firewall import fwaas_plugin as fwaas_plugin_v1
from neutron_fwaas.services.firewall import fwaas_plugin_v2
from vmware_nsx.common import config from vmware_nsx.common import config
from vmware_nsx.db import db as nsx_db from vmware_nsx.db import db as nsx_db
from vmware_nsx.extensions import projectpluginmap from vmware_nsx.extensions import projectpluginmap
@ -35,6 +32,17 @@ from vmware_nsx.services.fwaas.nsx_v3 import fwaas_callbacks_v2
from vmware_nsx.shell.admin.plugins.common import utils as admin_utils from vmware_nsx.shell.admin.plugins.common import utils as admin_utils
from vmware_nsxlib.v3 import nsx_constants from vmware_nsxlib.v3 import nsx_constants
try:
from neutron_fwaas.services.firewall import fwaas_plugin as fwaas_plugin_v1
from neutron_fwaas.services.firewall import fwaas_plugin_v2
except ImportError:
# FWaaS project no found
from vmware_nsx.services.fwaas.common import fwaas_mocks \
as fwaas_plugin_v1
from vmware_nsx.services.fwaas.common import fwaas_mocks \
as fwaas_plugin_v2
_NSXLIB = None _NSXLIB = None