Integrate Address Scope OVO into DB

This change take advantage of the use of Oslo-Versioned Objects for
Address Scope class.

Co-Authored-By: Ankur Gupta <ankur.gupta@intel.com>
Co-Authored-By: Mohit Malik <mohit.malik@intel.com>

Change-Id: I7d063b23f45c65c91750c4482817dd372ea1ac93
Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db
This commit is contained in:
Victor Morales 2016-04-19 14:04:11 -05:00 committed by Ihar Hrachyshka
parent bc5d1a0d58
commit 0d073270a3
1 changed files with 31 additions and 37 deletions

View File

@ -14,7 +14,6 @@
from neutron_lib import constants
from oslo_utils import uuidutils
from sqlalchemy.orm import exc
from neutron._i18n import _
from neutron.api.v2 import attributes as attr
@ -24,6 +23,8 @@ from neutron.db import api as db_api
from neutron.db import db_base_plugin_v2
from neutron.db.models import address_scope as address_scope_model
from neutron.extensions import address_scope as ext_address_scope
from neutron.objects import address_scope as obj_addr_scope
from neutron.objects import base as base_obj
from neutron.objects import subnetpool as subnetpool_obj
@ -45,11 +46,10 @@ class AddressScopeDbMixin(ext_address_scope.AddressScopePluginBase):
return db_utils.resource_fields(res, fields)
def _get_address_scope(self, context, id):
try:
return self._get_by_id(context, address_scope_model.AddressScope,
id)
except exc.NoResultFound:
obj = obj_addr_scope.AddressScope.get_object(context, id=id)
if obj is None:
raise ext_address_scope.AddressScopeNotFound(address_scope_id=id)
return obj
def is_address_scope_owned_by_tenant(self, context, id):
"""Check if address scope id is owned by the tenant or not.
@ -74,28 +74,26 @@ class AddressScopeDbMixin(ext_address_scope.AddressScopePluginBase):
"""Create an address scope."""
a_s = address_scope['address_scope']
address_scope_id = a_s.get('id') or uuidutils.generate_uuid()
with db_api.context_manager.writer.using(context):
pool_args = {'tenant_id': a_s['tenant_id'],
'id': address_scope_id,
'name': a_s['name'],
'shared': a_s['shared'],
'ip_version': a_s['ip_version']}
address_scope = address_scope_model.AddressScope(**pool_args)
context.session.add(address_scope)
return self._make_address_scope_dict(address_scope)
pool_args = {'tenant_id': a_s['tenant_id'],
'id': address_scope_id,
'name': a_s['name'],
'shared': a_s['shared'],
'ip_version': a_s['ip_version']}
address_scope = obj_addr_scope.AddressScope(context, **pool_args)
address_scope.create()
return self._make_address_scope_dict(address_scope)
def update_address_scope(self, context, id, address_scope):
a_s = address_scope['address_scope']
with db_api.context_manager.writer.using(context):
address_scope = self._get_address_scope(context, id)
if address_scope.shared and not a_s.get('shared', True):
reason = _("Shared address scope can't be unshared")
raise ext_address_scope.AddressScopeUpdateError(
address_scope_id=id, reason=reason)
address_scope.update(a_s)
address_scope = self._get_address_scope(context, id)
if address_scope.shared and not a_s.get('shared', True):
reason = _("Shared address scope can't be unshared")
raise ext_address_scope.AddressScopeUpdateError(
address_scope_id=id, reason=reason)
return self._make_address_scope_dict(address_scope)
address_scope.update_fields(a_s)
address_scope.update()
return self._make_address_scope_dict(address_scope)
def get_address_scope(self, context, id, fields=None):
address_scope = self._get_address_scope(context, id)
@ -104,21 +102,17 @@ class AddressScopeDbMixin(ext_address_scope.AddressScopePluginBase):
def get_address_scopes(self, context, filters=None, fields=None,
sorts=None, limit=None, marker=None,
page_reverse=False):
marker_obj = self._get_marker_obj(context, 'addrscope', limit, marker)
collection = self._get_collection(context,
address_scope_model.AddressScope,
self._make_address_scope_dict,
filters=filters, fields=fields,
sorts=sorts,
limit=limit,
marker_obj=marker_obj,
page_reverse=page_reverse)
return collection
pager = base_obj.Pager(sorts, limit, page_reverse, marker)
address_scopes = obj_addr_scope.AddressScope.get_objects(
context, _pager=pager, **filters)
return [
self._make_address_scope_dict(addr_scope, fields)
for addr_scope in address_scopes
]
def get_address_scopes_count(self, context, filters=None):
return self._get_collection_count(context,
address_scope_model.AddressScope,
filters=filters)
return obj_addr_scope.AddressScope.count(context, **filters)
def delete_address_scope(self, context, id):
with db_api.context_manager.writer.using(context):
@ -126,7 +120,7 @@ class AddressScopeDbMixin(ext_address_scope.AddressScopePluginBase):
address_scope_id=id):
raise ext_address_scope.AddressScopeInUse(address_scope_id=id)
address_scope = self._get_address_scope(context, id)
context.session.delete(address_scope)
address_scope.delete()
def _extend_network_dict_address_scope(self, network_res, network_db):
network_res[ext_address_scope.IPV4_ADDRESS_SCOPE] = None