req/res alignment complete.

Status code alignment ALMOST complete (need to sort out 200 vs 202 for create ops)

Need to align unit tests.
This commit is contained in:
Salvatore Orlando 2011-08-02 17:51:53 +01:00
parent 6a99c4c8a3
commit fee565d19a
5 changed files with 15 additions and 53 deletions

View File

@ -26,6 +26,7 @@ import webob.exc
from quantum import manager
from quantum.api import faults
from quantum.api import attachments
from quantum.api import networks
from quantum.api import ports
from quantum.common import flags
@ -60,21 +61,24 @@ class APIRouterV01(wsgi.Router):
parent_resource=dict(member_name='network',
collection_name=uri_prefix +\
'networks'))
attachments_ctrl = attachments.Controller(plugin)
mapper.connect("get_resource",
uri_prefix + 'networks/{network_id}/' \
'ports/{id}/attachment{.format}',
controller=ports.Controller(plugin),
controller=attachments_ctrl,
action="get_resource",
conditions=dict(method=['GET']))
mapper.connect("attach_resource",
uri_prefix + 'networks/{network_id}/' \
'ports/{id}/attachment{.format}',
controller=ports.Controller(plugin),
controller=attachments_ctrl,
action="attach_resource",
conditions=dict(method=['PUT']))
mapper.connect("detach_resource",
uri_prefix + 'networks/{network_id}/' \
'ports/{id}/attachment{.format}',
controller=ports.Controller(plugin),
controller=attachments_ctrl,
action="detach_resource",
conditions=dict(method=['DELETE']))

View File

@ -33,10 +33,6 @@ class Controller(common.QuantumController):
'default-value': 'DOWN',
'required': False}, ]
_attachment_ops_param_list = [{
'param-name': 'attachment-id',
'required': True}, ]
_serialization_metadata = {
"application/xml": {
"attributes": {
@ -129,45 +125,3 @@ class Controller(common.QuantumController):
return faults.Fault(faults.PortNotFound(e))
except exception.PortInUse as e:
return faults.Fault(faults.PortInUse(e))
def get_resource(self, request, tenant_id, network_id, id):
try:
result = self._plugin.get_port_details(
tenant_id, network_id, id).get('attachment-id',
None)
return dict(attachment=result)
except exception.NetworkNotFound as e:
return faults.Fault(faults.NetworkNotFound(e))
except exception.PortNotFound as e:
return faults.Fault(faults.PortNotFound(e))
def attach_resource(self, request, tenant_id, network_id, id):
try:
request_params = \
self._parse_request_params(request,
self._attachment_ops_param_list)
except exc.HTTPError as e:
return faults.Fault(e)
try:
self._plugin.plug_interface(tenant_id,
network_id, id,
request_params['attachment-id'])
return exc.HTTPAccepted()
except exception.NetworkNotFound as e:
return faults.Fault(faults.NetworkNotFound(e))
except exception.PortNotFound as e:
return faults.Fault(faults.PortNotFound(e))
except exception.PortInUse as e:
return faults.Fault(faults.PortInUse(e))
except exception.AlreadyAttached as e:
return faults.Fault(faults.AlreadyAttached(e))
def detach_resource(self, request, tenant_id, network_id, id):
try:
self._plugin.unplug_interface(tenant_id,
network_id, id)
return exc.HTTPAccepted()
except exception.NetworkNotFound as e:
return faults.Fault(faults.NetworkNotFound(e))
except exception.PortNotFound as e:
return faults.Fault(faults.PortNotFound(e))

View File

@ -61,4 +61,4 @@ class ViewBuilder(object):
"""Return details about a specific logical port."""
return dict(port=dict(id=port_data['port-id'],
state=port_data['port-state'],
attachment=port_data['attachment']))
attachment=port_data['attachment-id']))

View File

@ -17,6 +17,8 @@
# @author: Brad Hall, Nicira Networks, Inc.
# @author: Dan Wendlandt, Nicira Networks, Inc.
import logging
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, exc
@ -25,7 +27,7 @@ from quantum.db import models
_ENGINE = None
_MAKER = None
BASE = models.BASE
LOG = logging.getLogger('quantum.plugins.SamplePlugin')
def configure_db(options):
"""
@ -200,7 +202,8 @@ def port_unset_attachment(port_id):
port = port_get(port_id)
port.interface_id = None
session.merge(port)
session.flush
session.flush()
port = port_get(port_id)
def port_destroy(port_id):

View File

@ -68,13 +68,14 @@ class Port(BASE, QuantumBase):
uuid = Column(String(255), primary_key=True)
network_id = Column(String(255), ForeignKey("networks.uuid"),
nullable=False)
interface_id = Column(String(255))
interface_id = Column(String(255), nullable=True)
# Port state - Hardcoding string value at the moment
state = Column(String(8))
def __init__(self, network_id):
self.uuid = str(uuid.uuid4())
self.network_id = network_id
self.interface_id = None
self.state = "DOWN"
def __repr__(self):