Routes requests on the Quantum API to the appropriate controller
"""
- def __init__(self, ext_mgr=None):
+ def __init__(self, options=None):
mapper = routes.Mapper()
- self._setup_routes(mapper)
+ self._setup_routes(mapper, options)
super(APIRouterV01, self).__init__(mapper)
- def _setup_routes(self, mapper):
-
+ def _setup_routes(self, mapper, options):
+ # Loads the quantum plugin
+ plugin = manager.QuantumManager(options).get_plugin()
uri_prefix = '/tenants/{tenant_id}/'
mapper.resource('network', 'networks',
- controller=networks.Controller(),
+ controller=networks.Controller(plugin),
+ collection={'detail': 'GET'},
+ member={'detail': 'GET'},
path_prefix=uri_prefix)
mapper.resource('port', 'ports',
- controller=ports.Controller(),
+ controller=ports.Controller(plugin),
parent_resource=dict(member_name='network',
collection_name=uri_prefix +\
- 'networks'))
-
+ 'networks'))
mapper.connect("get_resource",
uri_prefix + 'networks/{network_id}/' \
'ports/{id}/attachment{.format}',
mapper.connect("detach_resource",
uri_prefix + 'networks/{network_id}/' \
'ports/{id}/attachment{.format}',
- controller=ports.Controller(),
+ controller=ports.Controller(plugin),
action="detach_resource",
conditions=dict(method=['DELETE']))
+ print "MAPPED ROUTES"
+ print mapper
def index(self, request, tenant_id):
""" Returns a list of network ids """
#TODO: this should be for a given tenant!!!
- return self._items(request, tenant_id, is_detail=False)
+ return self._items(request, tenant_id)
- def _items(self, request, tenant_id, is_detail):
+ def _item(self, req, tenant_id, network_id,
+ net_details=True, port_details=False):
+ network = self.network_manager.get_network_details(
+ tenant_id, network_id)
+ builder = networks_view.get_view_builder(req)
+ result = builder.build(network, net_details, port_details)
+ return dict(networks=result)
+
+ def _items(self, req, tenant_id, net_details=False, port_details=False):
""" Returns a list of networks. """
- networks = self.network_manager.get_all_networks(tenant_id)
+ networks = self._plugin.get_all_networks(tenant_id)
- builder = networks_view.get_view_builder(request)
- result = [builder.build(network, is_detail)['network']
+ builder = networks_view.get_view_builder(req)
+ result = [builder.build(network, net_details, port_details)['network']
for network in networks]
return dict(networks=result)
def show(self, request, tenant_id, id):
""" Returns network details for the given network id """
try:
+ return self._item(request, tenant_id, id,
+ net_details=True, port_details=False)
+ except exception.NetworkNotFound as e:
+ return faults.Fault(faults.NetworkNotFound(e))
+
+ def detail(self, request, **kwargs):
+ tenant_id = kwargs.get('tenant_id')
+ network_id = kwargs.get('id')
+ try:
+ if network_id:
+ return self._item(request, tenant_id, network_id,
+ net_details=True, port_details=True)
+ else:
+ #do like show but with detaik
+ return self._items(request, tenant_id,
+ net_details=True, port_details=False)
+ network = self._plugin.get_network_details(
+ tenant_id, id)
+ builder = networks_view.get_view_builder(request)
+ #build response with details
+ result = builder.build(network, True)
+ return dict(networks=result)
except exception.NetworkNotFound as e:
return faults.Fault(faults.NetworkNotFound(e))
except exc.HTTPError as e:
return faults.Fault(e)
try:
- port = self.network_manager.\
- update_port(tenant_id, network_id, id,
- request_params['port-state'])
+ port = self._plugin.update_port(tenant_id, network_id, id,
- request_params['port-state'])
++ request_params['port-state'])
builder = ports_view.get_view_builder(request)
result = builder.build(port, True)
return dict(ports=result)
""" Destroys the port with the given id """
#look for port state in request
try:
- self.network_manager.delete_port(tenant_id, network_id, id)
+ self._plugin.delete_port(tenant_id, network_id, id)
return exc.HTTPAccepted()
- #TODO(salvatore-orlando): Handle portInUse error
+ # TODO(salvatore-orlando): Handle portInUse error
except exception.NetworkNotFound as e:
return faults.Fault(faults.NetworkNotFound(e))
except exception.PortNotFound as e:
client/cli/api development
"""
- #static data for networks and ports
- _port_dict_1 = {
- 1: {'port-id': 1,
- 'port-state': 'DOWN',
- 'attachment': None},
- 2: {'port-id': 2,
- 'port-state': 'ACTIVE',
- 'attachment': None}}
- _port_dict_2 = {
- 1: {'port-id': 1,
- 'port-state': 'ACTIVE',
- 'attachment': 'SomeFormOfVIFID'},
- 2: {'port-id': 2,
- 'port-state': 'DOWN',
- 'attachment': None}}
- _networks = {'001':
- {
- 'net-id': '001',
- 'net-name': 'pippotest',
- 'net-ports': _port_dict_1
- },
- '002':
- {
- 'net-id': '002',
- 'net-name': 'cicciotest',
- 'net-ports': _port_dict_2}}
-
def __init__(self):
- FakePlugin._net_counter = len(FakePlugin._networks)
- db.configure_db({'sql_connection':'sqlite:///:memory:'})
++ db.configure_db({'sql_connection': 'sqlite:///:memory:'})
+ FakePlugin._net_counter = 0
def _get_network(self, tenant_id, network_id):
- network = FakePlugin._networks.get(network_id)
- if not network:
+ try:
+ network = db.network_get(network_id)
+ except:
raise exc.NetworkNotFound(net_id=network_id)
return network