Relocate Metering DB models
This patch will separate metering db models from mixins for OVO implementation work. Change-Id: If1bdb64c36e1993d62269d390d3d18144b6c492d Partial-Bug: #1597913
This commit is contained in:
parent
571999037f
commit
820270fcac
|
@ -13,44 +13,20 @@
|
|||
# under the License.
|
||||
|
||||
import netaddr
|
||||
from neutron_lib.db import model_base
|
||||
from oslo_utils import uuidutils
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy import orm
|
||||
from sqlalchemy import sql
|
||||
|
||||
from neutron.api.rpc.agentnotifiers import metering_rpc_agent_api
|
||||
from neutron.api.v2 import attributes as attr
|
||||
from neutron.common import _deprecate
|
||||
from neutron.common import constants
|
||||
from neutron.db import common_db_mixin as base_db
|
||||
from neutron.db.models import l3 as l3_models
|
||||
from neutron.db.models import metering as metering_models
|
||||
from neutron.extensions import metering
|
||||
|
||||
|
||||
class MeteringLabelRule(model_base.BASEV2, model_base.HasId):
|
||||
direction = sa.Column(sa.Enum('ingress', 'egress',
|
||||
name='meteringlabels_direction'))
|
||||
remote_ip_prefix = sa.Column(sa.String(64))
|
||||
metering_label_id = sa.Column(sa.String(36),
|
||||
sa.ForeignKey("meteringlabels.id",
|
||||
ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
excluded = sa.Column(sa.Boolean, default=False, server_default=sql.false())
|
||||
|
||||
|
||||
class MeteringLabel(model_base.BASEV2,
|
||||
model_base.HasId,
|
||||
model_base.HasProject):
|
||||
name = sa.Column(sa.String(attr.NAME_MAX_LEN))
|
||||
description = sa.Column(sa.String(attr.LONG_DESCRIPTION_MAX_LEN))
|
||||
rules = orm.relationship(MeteringLabelRule, backref="label",
|
||||
cascade="delete", lazy="joined")
|
||||
routers = orm.relationship(
|
||||
l3_models.Router,
|
||||
primaryjoin="MeteringLabel.tenant_id==Router.tenant_id",
|
||||
foreign_keys='MeteringLabel.tenant_id',
|
||||
uselist=True)
|
||||
shared = sa.Column(sa.Boolean, default=False, server_default=sql.false())
|
||||
_deprecate._moved_global('MeteringLabelRule', new_module=metering_models)
|
||||
_deprecate._moved_global('MeteringLabel', new_module=metering_models)
|
||||
|
||||
|
||||
class MeteringDbMixin(metering.MeteringPluginBase,
|
||||
|
@ -71,11 +47,12 @@ class MeteringDbMixin(metering.MeteringPluginBase,
|
|||
m = metering_label['metering_label']
|
||||
|
||||
with context.session.begin(subtransactions=True):
|
||||
metering_db = MeteringLabel(id=uuidutils.generate_uuid(),
|
||||
description=m['description'],
|
||||
tenant_id=m['tenant_id'],
|
||||
name=m['name'],
|
||||
shared=m['shared'])
|
||||
metering_db = metering_models.MeteringLabel(
|
||||
id=uuidutils.generate_uuid(),
|
||||
description=m['description'],
|
||||
tenant_id=m['tenant_id'],
|
||||
name=m['name'],
|
||||
shared=m['shared'])
|
||||
context.session.add(metering_db)
|
||||
|
||||
return self._make_metering_label_dict(metering_db)
|
||||
|
@ -83,7 +60,9 @@ class MeteringDbMixin(metering.MeteringPluginBase,
|
|||
def delete_metering_label(self, context, label_id):
|
||||
with context.session.begin(subtransactions=True):
|
||||
try:
|
||||
label = self._get_by_id(context, MeteringLabel, label_id)
|
||||
label = self._get_by_id(context,
|
||||
metering_models.MeteringLabel,
|
||||
label_id)
|
||||
except orm.exc.NoResultFound:
|
||||
raise metering.MeteringLabelNotFound(label_id=label_id)
|
||||
|
||||
|
@ -91,7 +70,9 @@ class MeteringDbMixin(metering.MeteringPluginBase,
|
|||
|
||||
def get_metering_label(self, context, label_id, fields=None):
|
||||
try:
|
||||
metering_label = self._get_by_id(context, MeteringLabel, label_id)
|
||||
metering_label = self._get_by_id(context,
|
||||
metering_models.MeteringLabel,
|
||||
label_id)
|
||||
except orm.exc.NoResultFound:
|
||||
raise metering.MeteringLabelNotFound(label_id=label_id)
|
||||
|
||||
|
@ -102,7 +83,7 @@ class MeteringDbMixin(metering.MeteringPluginBase,
|
|||
page_reverse=False):
|
||||
marker_obj = self._get_marker_obj(context, 'metering_labels', limit,
|
||||
marker)
|
||||
return self._get_collection(context, MeteringLabel,
|
||||
return self._get_collection(context, metering_models.MeteringLabel,
|
||||
self._make_metering_label_dict,
|
||||
filters=filters, fields=fields,
|
||||
sorts=sorts,
|
||||
|
@ -124,7 +105,7 @@ class MeteringDbMixin(metering.MeteringPluginBase,
|
|||
marker_obj = self._get_marker_obj(context, 'metering_label_rules',
|
||||
limit, marker)
|
||||
|
||||
return self._get_collection(context, MeteringLabelRule,
|
||||
return self._get_collection(context, metering_models.MeteringLabelRule,
|
||||
self._make_metering_label_rule_dict,
|
||||
filters=filters, fields=fields,
|
||||
sorts=sorts,
|
||||
|
@ -134,8 +115,8 @@ class MeteringDbMixin(metering.MeteringPluginBase,
|
|||
|
||||
def get_metering_label_rule(self, context, rule_id, fields=None):
|
||||
try:
|
||||
metering_label_rule = self._get_by_id(context,
|
||||
MeteringLabelRule, rule_id)
|
||||
metering_label_rule = self._get_by_id(
|
||||
context, metering_models.MeteringLabelRule, rule_id)
|
||||
except orm.exc.NoResultFound:
|
||||
raise metering.MeteringLabelRuleNotFound(rule_id=rule_id)
|
||||
|
||||
|
@ -168,11 +149,12 @@ class MeteringDbMixin(metering.MeteringPluginBase,
|
|||
|
||||
self._validate_cidr(context, label_id, ip_prefix, direction,
|
||||
excluded)
|
||||
metering_db = MeteringLabelRule(id=uuidutils.generate_uuid(),
|
||||
metering_label_id=label_id,
|
||||
direction=direction,
|
||||
excluded=m['excluded'],
|
||||
remote_ip_prefix=ip_prefix)
|
||||
metering_db = metering_models.MeteringLabelRule(
|
||||
id=uuidutils.generate_uuid(),
|
||||
metering_label_id=label_id,
|
||||
direction=direction,
|
||||
excluded=m['excluded'],
|
||||
remote_ip_prefix=ip_prefix)
|
||||
context.session.add(metering_db)
|
||||
|
||||
return self._make_metering_label_rule_dict(metering_db)
|
||||
|
@ -180,7 +162,9 @@ class MeteringDbMixin(metering.MeteringPluginBase,
|
|||
def delete_metering_label_rule(self, context, rule_id):
|
||||
with context.session.begin(subtransactions=True):
|
||||
try:
|
||||
rule = self._get_by_id(context, MeteringLabelRule, rule_id)
|
||||
rule = self._get_by_id(context,
|
||||
metering_models.MeteringLabelRule,
|
||||
rule_id)
|
||||
except orm.exc.NoResultFound:
|
||||
raise metering.MeteringLabelRuleNotFound(rule_id=rule_id)
|
||||
context.session.delete(rule)
|
||||
|
@ -234,8 +218,9 @@ class MeteringDbMixin(metering.MeteringPluginBase,
|
|||
return list(routers_dict.values())
|
||||
|
||||
def get_sync_data_for_rule(self, context, rule):
|
||||
label = context.session.query(MeteringLabel).get(
|
||||
rule['metering_label_id'])
|
||||
label = context.session.query(
|
||||
metering_models.MeteringLabel).get(
|
||||
rule['metering_label_id'])
|
||||
|
||||
if label.shared:
|
||||
routers = self._get_collection_query(context, l3_models.Router)
|
||||
|
@ -253,12 +238,16 @@ class MeteringDbMixin(metering.MeteringPluginBase,
|
|||
return list(routers_dict.values())
|
||||
|
||||
def get_sync_data_metering(self, context, label_id=None, router_ids=None):
|
||||
labels = context.session.query(MeteringLabel)
|
||||
labels = context.session.query(metering_models.MeteringLabel)
|
||||
|
||||
if label_id:
|
||||
labels = labels.filter(MeteringLabel.id == label_id)
|
||||
labels = labels.filter(
|
||||
metering_models.MeteringLabel.id == label_id)
|
||||
elif router_ids:
|
||||
labels = (labels.join(MeteringLabel.routers).
|
||||
labels = (labels.join(metering_models.MeteringLabel.routers).
|
||||
filter(l3_models.Router.id.in_(router_ids)))
|
||||
|
||||
return self._process_sync_metering_data(context, labels)
|
||||
|
||||
|
||||
_deprecate._MovedGlobals()
|
||||
|
|
|
@ -39,7 +39,6 @@ from neutron.db import l3_attrs_db # noqa
|
|||
from neutron.db import l3_dvrscheduler_db # noqa
|
||||
from neutron.db import l3_gwmode_db # noqa
|
||||
from neutron.db import l3_hamode_db # noqa
|
||||
from neutron.db.metering import metering_db # noqa
|
||||
from neutron.db import models
|
||||
from neutron.db import models_v2 # noqa
|
||||
from neutron.db.port_security import models as ps_models # noqa
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
# 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
|
||||
from sqlalchemy import orm
|
||||
from sqlalchemy import sql
|
||||
|
||||
from neutron.api.v2 import attributes as attr
|
||||
from neutron.db.models import l3 as l3_models
|
||||
|
||||
|
||||
class MeteringLabelRule(model_base.BASEV2, model_base.HasId):
|
||||
direction = sa.Column(sa.Enum('ingress', 'egress',
|
||||
name='meteringlabels_direction'))
|
||||
remote_ip_prefix = sa.Column(sa.String(64))
|
||||
metering_label_id = sa.Column(sa.String(36),
|
||||
sa.ForeignKey("meteringlabels.id",
|
||||
ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
excluded = sa.Column(sa.Boolean, default=False, server_default=sql.false())
|
||||
|
||||
|
||||
class MeteringLabel(model_base.BASEV2,
|
||||
model_base.HasId,
|
||||
model_base.HasProject):
|
||||
name = sa.Column(sa.String(attr.NAME_MAX_LEN))
|
||||
description = sa.Column(sa.String(attr.LONG_DESCRIPTION_MAX_LEN))
|
||||
rules = orm.relationship(MeteringLabelRule, backref="label",
|
||||
cascade="delete", lazy="joined")
|
||||
routers = orm.relationship(
|
||||
l3_models.Router,
|
||||
primaryjoin="MeteringLabel.tenant_id==Router.tenant_id",
|
||||
foreign_keys='MeteringLabel.tenant_id',
|
||||
uselist=True)
|
||||
shared = sa.Column(sa.Boolean, default=False, server_default=sql.false())
|
Loading…
Reference in New Issue