Relocate dvr model

As there would be issue of cyclic imports while implementation of
Oslo-Versioned Objects for DVR which has db models definition and
mixins in same file, this patch will relocate DVR models.

Change-Id: I4005570c7507ae9c28fd2910b368e4fdf5e603b0
Co-Authored-By: Victor Morales <victor.morales@intel.com>
Partial-Bug: #1597913
This commit is contained in:
tonytan4ever 2016-08-14 22:42:16 -04:00 committed by Ihar Hrachyshka
parent b6a296edf6
commit 509bc4c2ab
4 changed files with 47 additions and 20 deletions

View File

@ -14,13 +14,11 @@
# under the License.
from neutron_lib import constants
from neutron_lib.db import model_base
from neutron_lib import exceptions as n_exc
from oslo_config import cfg
from oslo_db import exception as db_exc
from oslo_log import helpers as log_helpers
from oslo_log import log as logging
import sqlalchemy as sa
from sqlalchemy import or_
from sqlalchemy.orm import exc
@ -28,13 +26,17 @@ from neutron._i18n import _, _LE
from neutron.callbacks import events
from neutron.callbacks import registry
from neutron.callbacks import resources
from neutron.common import _deprecate
from neutron.common import utils
from neutron.db import api as db_api
from neutron.db.models import dvr as dvr_models
from neutron.db import models_v2
from neutron.extensions import dvr as ext_dvr
from neutron.extensions import portbindings
from neutron import manager
_deprecate._moved_global('DistributedVirtualRouterMacAddress',
new_module=dvr_models)
LOG = logging.getLogger(__name__)
@ -55,15 +57,6 @@ dvr_mac_address_opts = [
cfg.CONF.register_opts(dvr_mac_address_opts)
class DistributedVirtualRouterMacAddress(model_base.BASEV2):
"""Represents a v2 neutron distributed virtual router mac address."""
__tablename__ = 'dvr_host_macs'
host = sa.Column(sa.String(255), primary_key=True, nullable=False)
mac_address = sa.Column(sa.String(32), nullable=False, unique=True)
@db_api.retry_if_session_inactive()
def _delete_mac_associated_with_agent(resource, event, trigger, context, agent,
**kwargs):
@ -76,8 +69,11 @@ def _delete_mac_associated_with_agent(resource, event, trigger, context, agent,
return
try:
with context.session.begin(subtransactions=True):
entry = (context.session.query(DistributedVirtualRouterMacAddress).
filter(DistributedVirtualRouterMacAddress.host == host).
entry = (context.session.query(
dvr_models.DistributedVirtualRouterMacAddress).
filter(
dvr_models.DistributedVirtualRouterMacAddress.host ==
host).
one())
context.session.delete(entry)
except exc.NoResultFound:
@ -107,9 +103,11 @@ class DVRDbMixin(ext_dvr.DVRMacAddressPluginBase):
def _get_dvr_mac_address_by_host(self, context, host):
try:
query = context.session.query(DistributedVirtualRouterMacAddress)
query = context.session.query(
dvr_models.DistributedVirtualRouterMacAddress)
dvrma = query.filter(
DistributedVirtualRouterMacAddress.host == host).one()
dvr_models.DistributedVirtualRouterMacAddress.host == host
).one()
except exc.NoResultFound:
raise ext_dvr.DVRMacAddressNotFound(host=host)
return dvrma
@ -119,7 +117,7 @@ class DVRDbMixin(ext_dvr.DVRMacAddressPluginBase):
def _create_dvr_mac_address_retry(self, context, host, base_mac):
with context.session.begin(subtransactions=True):
mac_address = utils.get_random_mac(base_mac)
dvr_mac_binding = DistributedVirtualRouterMacAddress(
dvr_mac_binding = dvr_models.DistributedVirtualRouterMacAddress(
host=host, mac_address=mac_address)
context.session.add(dvr_mac_binding)
LOG.debug("Generated DVR mac for host %(host)s "
@ -144,7 +142,7 @@ class DVRDbMixin(ext_dvr.DVRMacAddressPluginBase):
def get_dvr_mac_address_list(self, context):
with context.session.begin(subtransactions=True):
return (context.session.
query(DistributedVirtualRouterMacAddress).all())
query(dvr_models.DistributedVirtualRouterMacAddress).all())
def get_dvr_mac_address_by_host(self, context, host):
"""Determine the MAC for the DVR port associated to host."""
@ -221,3 +219,6 @@ class DVRDbMixin(ext_dvr.DVRMacAddressPluginBase):
internal_port = internal_gateway_ports[0]
subnet_info['gateway_mac'] = internal_port['mac_address']
return subnet_info
_deprecate._MovedGlobals()

View File

@ -29,7 +29,6 @@ from neutron.common import utils
from neutron.db import agents_db # noqa
from neutron.db import agentschedulers_db # noqa
from neutron.db import dns_db # noqa
from neutron.db import dvr_mac_db # noqa
from neutron.db.extra_dhcp_opt import models as edo_models # noqa
from neutron.db import flavors_db # noqa
from neutron.db import l3_attrs_db # noqa

26
neutron/db/models/dvr.py Normal file
View File

@ -0,0 +1,26 @@
# Copyright 2016 Hewlett-Packard Development Company, L.P.
# 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.
from neutron_lib.db import model_base
import sqlalchemy as sa
class DistributedVirtualRouterMacAddress(model_base.BASEV2):
"""Represents a v2 neutron distributed virtual router mac address."""
__tablename__ = 'dvr_host_macs'
host = sa.Column(sa.String(255), primary_key=True, nullable=False)
mac_address = sa.Column(sa.String(32), nullable=False, unique=True)

View File

@ -21,6 +21,7 @@ from neutron.callbacks import registry
from neutron.callbacks import resources
from neutron import context
from neutron.db import dvr_mac_db
from neutron.db.models import dvr as dvr_models
from neutron.extensions import dvr
from neutron.extensions import portbindings
from neutron import manager
@ -42,13 +43,13 @@ class DvrDbMixinTestCase(test_plugin.Ml2PluginV2TestCase):
def _create_dvr_mac_entry(self, host, mac_address):
with self.ctx.session.begin(subtransactions=True):
entry = dvr_mac_db.DistributedVirtualRouterMacAddress(
entry = dvr_models.DistributedVirtualRouterMacAddress(
host=host, mac_address=mac_address)
self.ctx.session.add(entry)
def test__get_dvr_mac_address_by_host(self):
with self.ctx.session.begin(subtransactions=True):
entry = dvr_mac_db.DistributedVirtualRouterMacAddress(
entry = dvr_models.DistributedVirtualRouterMacAddress(
host='foo_host', mac_address='foo_mac_address')
self.ctx.session.add(entry)
result = self.mixin._get_dvr_mac_address_by_host(self.ctx, 'foo_host')