return credential
def _build_simple(self, credential_data):
- """Return a simple model of a server."""
+ """Return a simple description of credential."""
return dict(credential=dict(id=credential_data['credential_id']))
def _build_detail(self, credential_data):
- """Return a simple model of a server."""
+ """Return a detailed description of credential."""
return dict(credential=dict(id=credential_data['credential_id'],
name=credential_data['user_name'],
- password=credential_data['password']))
\ No newline at end of file
+ password=credential_data['password']))
+++ /dev/null
-"""
-# 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
-
-
-# pylint: disable-msg=E0602
-class ExtensionException(Exception):
- """Quantum Cisco api Exception
-
- Taken from nova.exception.NovaException
- To correctly use this class, inherit from it and define
- a 'message' property. That message will get printf'd
- with the keyword arguments provided to the constructor.
-
- """
- message = _("An unknown exception occurred.")
-
- def __init__(self, **kwargs):
- try:
- self._error_string = self.message % kwargs
-
- except Exception:
- # at least get the core message out if something happened
- self._error_string = self.message
-
- def __str__(self):
- """Error Msg"""
- return self._error_string
-
-
-class ProcessExecutionError(IOError):
- """Process Exe Error"""
- def __init__(self, stdout=None, stderr=None, exit_code=None, cmd=None,
- description=None):
- if description is None:
- description = "Unexpected error while running command."
- if exit_code is None:
- exit_code = '-'
- message = "%s\nCommand: %s\nExit code: %s\nStdout: %r\nStderr: %r" % (
- description, cmd, exit_code, stdout, stderr)
- IOError.__init__(self, message)
-
-
-class Error(Exception):
- """Error Class"""
- def __init__(self, message=None):
- super(Error, self).__init__(message)
-
-
-class ApiError(Error):
- """Api Error"""
- def __init__(self, message='Unknown', code='Unknown'):
- self.message = message
- self.code = code
- super(ApiError, self).__init__('%s: %s' % (code, message))
-
-
-class NotFound(ExtensionException):
- """Error Msg"""
- pass
-
-
-class ClassNotFound(NotFound):
- """Extension Error Msg"""
- message = _("Class %(class_name)s could not be found")
-
-
-class PortprofileNotFound(NotFound):
- """Extension Error Msg"""
- message = _("Portprofile %(_id)s could not be found")
-
-
-class NovatenantNotFound(NotFound):
- """Extension Error Msg"""
- message = _("Novatenant %(_id)s could not be found")
-
-
-class PortNotFound(NotFound):
- """Extension Error"""
- message = _("Port %(port_id)s could not be found " \
- "on Network %(net_id)s")
-
-
-class CredentialNotFound(NotFound):
- """Extension Error"""
- message = _("Credential %(_id)s could not be found")
-
-
-class QosNotFound(NotFound):
- """Extension Error"""
- message = _("QoS %(_id)s could not be found")
-
-
-class Duplicate(Error):
- """Duplication Error"""
- pass
-
-
-class NotAuthorized(Error):
- "Not Auth Error"
- pass
-
-
-class NotEmpty(Error):
- """Not Empty Error"""
- pass
-
-
-class Invalid(Error):
- """Invalid Error"""
- pass
-
-
-class InvalidContentType(Invalid):
- message = _("Invalid content type %(content_type)s.")
-
-
-class BadInputError(Exception):
- """Error resulting from a client sending bad input to a server"""
- pass
-
-
-class MissingArgumentError(Error):
- """Miss arg error"""
- pass
-
-
-def wrap_exception(afunc):
- """Wrap Exception"""
- def _wrap(*args, **kw):
- """Internal Wrap Exception func"""
- try:
- return afunc(*args, **kw)
- except Exception, exp:
- if not isinstance(exp, Error):
- #exc_type, exc_value, exc_traceback = sys.exc_info()
- logging.exception('Uncaught exception')
- #logging.error(traceback.extract_stack(exc_traceback))
- raise Error(str(exp))
- raise
- _wrap.func_name = afunc.func_name
- return _wrap
+++ /dev/null
-"""
-# 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 webob.dec
-
-from quantum.common import wsgi
-
-
-class Fault(webob.exc.HTTPException):
- """Error codes for API faults"""
-
- _fault_names = {
- 400: "malformedRequest",
- 401: "unauthorized",
- 420: "networkNotFound",
- 421: "PortprofileInUse",
- 430: "portNotFound",
- 431: "requestedStateInvalid",
- 432: "portInUse",
- 440: "alreadyAttached",
- 450: "PortprofileNotFound",
- 451: "CredentialNotFound",
- 452: "QoSNotFound",
- 453: "NovatenantNotFound",
- 470: "serviceUnavailable",
- 471: "pluginFault"}
-
- def __init__(self, exception):
- """Create a Fault for the given webob.exc.exception."""
- self.wrapped_exc = exception
-
- @webob.dec.wsgify(RequestClass=wsgi.Request)
- def __call__(self, req):
- """Generate a WSGI response based on the
- exception passed to constructor."""
- # Replace the body with fault details.
- code = self.wrapped_exc.status_int
- fault_name = self._fault_names.get(code, "quantumServiceFault")
- fault_data = {
- fault_name: {
- 'code': code,
- 'message': self.wrapped_exc.explanation}}
- # 'code' is an attribute on the fault tag itself
- content_type = req.best_match_content_type()
- self.wrapped_exc.body = wsgi.Serializer().\
- serialize(fault_data, content_type)
- self.wrapped_exc.content_type = content_type
- return self.wrapped_exc
-
-
-class PortprofileNotFound(webob.exc.HTTPClientError):
- """
- subclass of :class:`~HTTPClientError`
-
- This indicates that the server did not find the Portprofile specified
- in the HTTP request
-
- code: 450, title: Portprofile not Found
- """
- code = 450
- title = 'Portprofile Not Found'
- explanation = ('Unable to find a Portprofile with'
- + ' the specified identifier.')
-
-
-class PortNotFound(webob.exc.HTTPClientError):
- """
- subclass of :class:`~HTTPClientError`
-
- This indicates that the server did not find the port specified
- in the HTTP request for a given network
-
- code: 430, title: Port not Found
- """
- code = 430
- title = 'Port not Found'
- explanation = ('Unable to find a port with the specified identifier.')
-
-
-class CredentialNotFound(webob.exc.HTTPClientError):
- """
- subclass of :class:`~HTTPClientError`
-
- This indicates that the server did not find the Credential specified
- in the HTTP request
-
- code: 460, title: Credential not Found
- """
- code = 451
- title = 'Credential Not Found'
- explanation = ('Unable to find a Credential with'
- + ' the specified identifier.')
-
-
-class QosNotFound(webob.exc.HTTPClientError):
- """
- subclass of :class:`~HTTPClientError`
-
- This indicates that the server did not find the QoS specified
- in the HTTP request
-
- code: 480, title: QoS not Found
- """
- code = 452
- title = 'QoS Not Found'
- explanation = ('Unable to find a QoS with'
- + ' the specified identifier.')
-
-
-class NovatenantNotFound(webob.exc.HTTPClientError):
- """
- subclass of :class:`~HTTPClientError`
-
- This indicates that the server did not find the Novatenant specified
- in the HTTP request
-
- code: 480, title: Nova tenant not Found
- """
- code = 453
- title = 'Nova tenant Not Found'
- explanation = ('Unable to find a Novatenant with'
- + ' the specified identifier.')
-
-
-class RequestedStateInvalid(webob.exc.HTTPClientError):
- """
- subclass of :class:`~HTTPClientError`
-
- This indicates that the server could not update the port state to
- to the request value
-
- code: 431, title: Requested State Invalid
- """
- code = 431
- title = 'Requested State Invalid'
- explanation = ('Unable to update port state with specified value.')
# @author: Ying Liu, Cisco Systems, Inc.
#
"""
+from quantum.plugins.cisco.common import cisco_constants as const
def get_view_builder(req):
def build_host(self, host_data):
"""Return host description."""
- return dict(host_list=host_data['host_list'])
+ return dict(host_list=host_data[const.HOST_LIST])
def build_vif(self, vif_data):
"""Return VIF description."""
- return dict(vif_desc=vif_data['vif_desc'])
+ return dict(vif_desc=vif_data[const.VIF_DESC])
return portprofile
def _build_simple(self, portprofile_data):
- """Return a simple model of a portprofile"""
+ """Return a simple description of a portprofile"""
return dict(portprofile=dict(id=portprofile_data['profile_id']))
def _build_detail(self, portprofile_data):
return qos
def _build_simple(self, qos_data):
- """Return a simple model of a server."""
+ """Return a simple description of qos."""
return dict(qos=dict(id=qos_data['qos_id']))
def _build_detail(self, qos_data):
- """Return a simple model of a server."""
+ """Return a detailed description of qos."""
return dict(qos=dict(id=qos_data['qos_id'],
name=qos_data['qos_name'],
description=qos_data['qos_desc']))
import logging
from webob import exc
-from extensions import _credential_view as credential_view
-from quantum.plugins.cisco.common import cisco_exceptions as exception
-from extensions import _faults as faults
+from extensions import _credential_view as credential_view
from quantum.api import api_common as common
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.credentials')
"""extension class Credential"""
def __init__(self):
pass
-
+
@classmethod
def get_name(cls):
""" Returns Ext Resource Name """
""" Returns Ext Resources """
parent_resource = dict(member_name="tenant",
collection_name="extensions/csco/tenants")
-
controller = CredentialController(QuantumManager.get_plugin())
return [extensions.ResourceExtension('credentials', controller,
parent=parent_resource)]
'required': True}, {
'param-name': 'password',
'required': True}]
-
+
_serialization_metadata = {
"application/xml": {
"attributes": {
def __init__(self, plugin):
self._resource_name = 'credential'
self._plugin = plugin
-
+
def index(self, request, tenant_id):
""" Returns a list of credential ids """
return self._items(request, tenant_id, is_detail=False)
return exc.HTTPAccepted()
except exception.CredentialNotFound as exp:
return faults.Fault(faults.CredentialNotFound(exp))
-
from webob import exc
from extensions import _novatenant_view as novatenant_view
-from quantum.common import exceptions as qexception
-from extensions import _faults as faults
-
from quantum.api import api_common as common
+from quantum.common import exceptions as qexception
from quantum.common import extensions
from quantum.manager import QuantumManager
+from quantum.plugins.cisco.common import cisco_faults as faults
class Novatenant(object):
def __init__(self, plugin):
self._resource_name = 'novatenant'
self._plugin = plugin
-
- def index(self, request, tenant_id):
- """ Returns a list of novatenant ids """
- return "novatenant is a dummy resource"
-
- def _items(self, request, tenant_id, is_detail):
- """ Returns a list of novatenants. """
- return "novatenant is a dummy resource"
-
- # pylint: disable-msg=E1101,W0613
- def show(self, request, tenant_id, id):
- """ Returns novatenant details for the given novatenant id """
- return "novatenant is a dummy resource"
-
- def create(self, request, tenant_id):
- """ Creates a new novatenant for a given tenant """
- return "novatenant is a dummy resource"
-
- def update(self, request, tenant_id, id):
- """ Updates the name for the novatenant with the given id """
- return "novatenant is a dummy resource"
-
- def delete(self, request, tenant_id, id):
- """ Destroys the Novatenant with the given id """
- return "novatenant is a dummy resource"
-
+
#added for cisco's extension
+ # pylint: disable-msg=E1101,W0613
def get_host(self, request, tenant_id, id):
content_type = request.best_match_content_type()
print "Content type:%s" % content_type
from webob import exc
from extensions import _pprofiles as pprofiles_view
-from quantum.plugins.cisco.common import cisco_exceptions as exception
-from quantum.common import exceptions as qexception
-from extensions import _faults as faults
-
from quantum.api import api_common as common
+from quantum.common import exceptions as qexception
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
class Portprofile(object):
parent_resource = dict(member_name="tenant",
collection_name="extensions/csco/tenants")
member_actions = {'associate_portprofile': "PUT",
- 'disassociate_portprofile': "POST"}
+ 'disassociate_portprofile': "PUT"}
controller = PortprofilesController(QuantumManager.get_plugin())
return [extensions.ResourceExtension('portprofiles', controller,
parent=parent_resource,
from webob import exc
from extensions import _qos_view as qos_view
-from quantum.plugins.cisco.common import cisco_exceptions as exception
-from extensions import _exceptions as exte
-from extensions import _faults as faults
-
from quantum.api import api_common as common
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.qoss')
parent_resource = dict(member_name="tenant",
collection_name="extensions/csco/tenants")
member_actions = {'associate_portprofile': "PUT",
- 'disassociate_portprofile': "POST"}
+ 'disassociate_portprofile': "PUT"}
controller = portprofile.PortprofilesController(
QuantumManager.get_plugin())
res_ext = extensions.ResourceExtension('portprofiles', controller,
rename_response = self.test_app.put(rename_path, rename_req_body)
self.assertEqual(200, rename_response.status_int)
- # Clean Up - Delete the Port Profile
+ # Clean Up - Delete the Port Profile
self.tear_down_profile(rename_path)
LOG.debug("test_update_portprofile - END")
"/disassociate_portprofile"
disassociate_path = str(disassociate_path_temp)
- disassociate_response = self.test_app.post(
+ disassociate_response = self.test_app.put(
disassociate_path, req_assign_body,
content_type=self.contenttype)
self.assertEqual(202, disassociate_response.status_int)
""" Tear down associate profile"""
- self.test_app.post(dissociate_profile_path, req_body,
+ self.test_app.put(dissociate_profile_path, req_body,
content_type=self.contenttype)
self.tear_down_profile(delete_profile_path)
req_body = json.dumps(self.test_instance_data)
host_path = self.novatenants_path + "001/get_host"
host_response = self.test_app.put(
- host_path, req_body,
- content_type=self.contenttype)
+ host_path, req_body,
+ content_type=self.contenttype)
self.assertEqual(200, host_response.status_int)
LOG.debug("test_get_host - END")
LOG.debug("test_get_hostBADRequest - START")
host_path = self.novatenants_path + "001/get_host"
host_response = self.test_app.put(
- host_path, 'BAD_REQUEST',
- content_type=self.contenttype, status='*')
+ host_path, 'BAD_REQUEST',
+ content_type=self.contenttype, status='*')
self.assertEqual(400, host_response.status_int)
LOG.debug("test_get_hostBADRequest - END")