From: Ying Liu Date: Tue, 30 Aug 2011 23:13:59 +0000 (-0700) Subject: add multiport and exception handling X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=0aecd28498186899e75892b359025af24304c3e8;p=openstack-build%2Fneutron-build.git add multiport and exception handling --- diff --git a/extensions/multiport.py b/extensions/multiport.py new file mode 100644 index 000000000..bee4ab0e5 --- /dev/null +++ b/extensions/multiport.py @@ -0,0 +1,116 @@ +""" +# vim: tabstop=4 shiftwidth=4 softtabstop=4 +# +# Copyright 2011 Cisco Systems, 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: Ying Liu, Cisco Systems, Inc. +# +""" +import logging + +from webob import exc + +from quantum.api import api_common as common +from quantum.api.views import ports as port_view +from quantum.common import extensions +from quantum.manager import QuantumManager +from quantum.plugins.cisco.common import cisco_exceptions as exception +from quantum.plugins.cisco.common import cisco_faults as faults + +LOG = logging.getLogger('quantum.api.multiports') + + +class Multiport(object): + """extension class multiport""" + def __init__(self): + pass + + @classmethod + def get_name(cls): + """ Returns Ext Resource Name """ + return "Cisco Multiport" + + @classmethod + def get_alias(cls): + """ Returns Ext Resource Alias """ + return "Cisco Multiport" + + @classmethod + def get_description(cls): + """ Returns Ext Resource Description """ + return "handle multiple ports in one call" + + @classmethod + def get_namespace(cls): + """ Returns Ext Resource Namespace """ + return "http://docs.ciscocloud.com/api/ext/multiport/v1.0" + + @classmethod + def get_updated(cls): + """ Returns Ext Resource Update Time """ + return "2011-08-25T13:25:27-06:00" + + @classmethod + def get_resources(cls): + """ Returns Ext Resources """ + parent_resource = dict(member_name="tenant", + collection_name="extensions/csco/tenants") + controller = MultiportController(QuantumManager.get_plugin()) + return [extensions.ResourceExtension('multiport', controller, + parent=parent_resource)] + + +class MultiportController(common.QuantumController): + """ multiport API controller + based on QuantumController """ + + _multiport_ops_param_list = [{ + 'param-name': 'net_id_list', + 'required': True}, { + 'param-name': 'status', + 'required': True}, { + 'param-name': 'ports_desc', + 'required': True}] + + _serialization_metadata = { + "application/xml": { + "attributes": { + "multiport": ["id", "name"], + }, + }, + } + + def __init__(self, plugin): + self._resource_name = 'multiport' + self._plugin = plugin + + # pylint: disable-msg=E1101,W0613 + def create(self, request, tenant_id): + """ Creates a new multiport for a given tenant """ + try: + req_params = \ + self._parse_request_params(request, + self._multiport_ops_param_list) + except exc.HTTPError as exp: + return faults.Fault(exp) + multiports = self._plugin.\ + create_multiport(tenant_id, + req_params['net_id_list'], + req_params['status'], + req_params['ports_desc']) + builder = port_view.get_view_builder(request) + result = [builder.build(port)['port'] + for port in multiports] + return dict(ports=result)