Status code alignment ALMOST complete (need to sort out 200 vs 202 for create ops)
Need to align unit tests.
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
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']))
'default-value': 'DOWN',
'required': False}, ]
- _attachment_ops_param_list = [{
- 'param-name': 'attachment-id',
- 'required': True}, ]
-
_serialization_metadata = {
"application/xml": {
"attributes": {
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))
"""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']))
# @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
_ENGINE = None
_MAKER = None
BASE = models.BASE
-
+LOG = logging.getLogger('quantum.plugins.SamplePlugin')
def configure_db(options):
"""
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):
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):