058469e1b9
* adds new attribute 'flavor_id' for vpnservice * adds support for multiple drivers for VPNaaS This solution uses a flavor of service type VPN associated with a flavor profile containing a driver. During vpnservice creation, if a flavor_id is passed, it is used to find the provider for the driver which would handle the newly created vpnservice. The flavor_id and the provider-vpnservice association are pesisted in the DB. ApiImpact and DocImpact tags are added as the new optional flavor_id parameter should be described, as well as the support of multiple VPNaaS drivers. The original work and discussion about integrating VPNaaS and service type framework can be found in the following change: I9e195dfaee21b1cf204cb9b9fc773bc9e5af5936 ApiImpact DocImpact Closes-Bug: #1672920 Signed-off-by: Hunt Xu <mhuntxu@gmail.com> Change-Id: I0095e160481f1d4572e38ad1d3bbc8e183039b84
69 lines
1.9 KiB
Python
69 lines
1.9 KiB
Python
# Copyright 2017 Eayun, Inc.
|
|
#
|
|
# 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.api import extensions
|
|
from neutron_lib import exceptions as nexception
|
|
|
|
from neutron_vpnaas._i18n import _
|
|
|
|
|
|
class FlavorsPluginNotLoaded(nexception.NotFound):
|
|
message = _("Flavors plugin not found")
|
|
|
|
|
|
class NoProviderFoundForFlavor(nexception.NotFound):
|
|
message = _("No service provider found for flavor %(flavor_id)s")
|
|
|
|
|
|
EXTENDED_ATTRIBUTES_2_0 = {
|
|
'vpnservices': {
|
|
'flavor_id': {'allow_post': True, 'allow_put': False,
|
|
'validate': {'type:uuid_or_none': None},
|
|
'is_visible': True, 'default': None}
|
|
}
|
|
}
|
|
|
|
|
|
class Vpn_flavors(extensions.ExtensionDescriptor):
|
|
"""Extension class supporting flavors for vpnservices."""
|
|
|
|
@classmethod
|
|
def get_name(cls):
|
|
return "VPN Service Flavor Extension"
|
|
|
|
@classmethod
|
|
def get_alias(cls):
|
|
return 'vpn-flavors'
|
|
|
|
@classmethod
|
|
def get_description(cls):
|
|
return "Flavor support for vpnservices."
|
|
|
|
@classmethod
|
|
def get_updated(cls):
|
|
return "2017-04-19T00:00:00-00:00"
|
|
|
|
def get_extended_resources(self, version):
|
|
if version == "2.0":
|
|
return EXTENDED_ATTRIBUTES_2_0
|
|
else:
|
|
return {}
|
|
|
|
def get_required_extensions(self):
|
|
return ["vpnaas"]
|
|
|
|
def get_optional_extensions(self):
|
|
return ["flavors"]
|