From fee565d19a5b28860c3dbfb373d19a6df97be71c Mon Sep 17 00:00:00 2001 From: Salvatore Orlando Date: Tue, 2 Aug 2011 17:51:53 +0100 Subject: [PATCH] req/res alignment complete. Status code alignment ALMOST complete (need to sort out 200 vs 202 for create ops) Need to align unit tests. --- quantum/api/__init__.py | 10 +++++--- quantum/api/ports.py | 46 ----------------------------------- quantum/api/views/networks.py | 2 +- quantum/db/api.py | 7 ++++-- quantum/db/models.py | 3 ++- 5 files changed, 15 insertions(+), 53 deletions(-) diff --git a/quantum/api/__init__.py b/quantum/api/__init__.py index 619de63a977..0e914dbee70 100644 --- a/quantum/api/__init__.py +++ b/quantum/api/__init__.py @@ -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'])) diff --git a/quantum/api/ports.py b/quantum/api/ports.py index feb5f960b10..9255a26e399 100644 --- a/quantum/api/ports.py +++ b/quantum/api/ports.py @@ -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)) diff --git a/quantum/api/views/networks.py b/quantum/api/views/networks.py index 2242e00f794..61561e0bbfd 100644 --- a/quantum/api/views/networks.py +++ b/quantum/api/views/networks.py @@ -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'])) diff --git a/quantum/db/api.py b/quantum/db/api.py index 6813d2096ce..3b065ea65bc 100644 --- a/quantum/db/api.py +++ b/quantum/db/api.py @@ -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): diff --git a/quantum/db/models.py b/quantum/db/models.py index 1a18e7e5188..72c47e79787 100644 --- a/quantum/db/models.py +++ b/quantum/db/models.py @@ -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):