neutron/neutron/db/routerservicetype_db.py
Eugene Nikanorov 1b36e20771 Service Type Framework refactoring
implements blueprint service-type-framework-cleanup

* Defines logic and API for ServiceProvider - read-only entity
that admins provide in configuration and which is stored in memory
* ServiceType entity which maps to ServiceOfferings in new terms
is removed for now.
* Routed service insertion fixed to not to refer to service providers.
* In case configuration changes and some service providers are removed
then the resources must be cleanup in a special way (undeploy logical
resources). This is a matter of future work
* Add migration.

Change-Id: I400ad8f544ec8bdc7d2efb597c995f284ff05829
2013-07-25 21:47:30 +04:00

60 lines
2.3 KiB
Python

# vim: tabstop=4 shiftwidth=4 softtabstop=4
#
# Copyright 2013 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.
#
# @author: Kaiwei Fan, VMware, Inc
import sqlalchemy as sa
from neutron.db import model_base
from neutron.extensions import routerservicetype as rst
class RouterServiceTypeBinding(model_base.BASEV2):
router_id = sa.Column(sa.String(36),
sa.ForeignKey('routers.id', ondelete="CASCADE"),
primary_key=True)
service_type_id = sa.Column(sa.String(36),
nullable=False)
class RouterServiceTypeDbMixin(object):
"""Mixin class to add router service type."""
def _process_create_router_service_type_id(self, context, router):
with context.session.begin(subtransactions=True):
db = RouterServiceTypeBinding(
router_id=router['id'],
service_type_id=router[rst.SERVICE_TYPE_ID])
context.session.add(db)
return self._make_router_service_type_id_dict(db)
def _extend_router_service_type_id_dict(self, context, router):
rsbind = self._get_router_service_type_id_binding(
context, router['id'])
if rsbind:
router[rst.SERVICE_TYPE_ID] = rsbind['service_type_id']
def _get_router_service_type_id_binding(self, context, router_id):
query = self._model_query(context, RouterServiceTypeBinding)
query = query.filter(
RouterServiceTypeBinding.router_id == router_id)
return query.first()
def _make_router_service_type_id_dict(self, router_service_type):
res = {'router_id': router_service_type['router_id'],
'service_type_id': router_service_type[rst.SERVICE_TYPE_ID]}
return self._fields(res, None)