X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=src%2Femuvim%2Fapi%2Fopenstack%2Fopenstack_dummies%2Fneutron_dummy_api.py;h=2f11d9f9af07d2520033f9e6c4ed51c4225c03bd;hb=aa8823c85d94a4fa72de058076195296334cdb91;hp=154f1cac1673699fac33143d9a0081a3a5a58cb3;hpb=72f09885db3935e77901c3dee132cb176b927c7b;p=osm%2Fvim-emu.git diff --git a/src/emuvim/api/openstack/openstack_dummies/neutron_dummy_api.py b/src/emuvim/api/openstack/openstack_dummies/neutron_dummy_api.py index 154f1ca..2f11d9f 100755 --- a/src/emuvim/api/openstack/openstack_dummies/neutron_dummy_api.py +++ b/src/emuvim/api/openstack/openstack_dummies/neutron_dummy_api.py @@ -25,9 +25,10 @@ # partner consortium (www.sonata-nfv.eu). from flask_restful import Resource from flask import request, Response -from emuvim.api.openstack.openstack_dummies.base_openstack_dummy import BaseOpenstackDummy +from emuvim.api.openstack.openstack_dummies.base_openstack_dummy import \ + BaseOpenstackDummy from datetime import datetime -import neutron_sfc_dummy_api as SFC +import emuvim.api.openstack.openstack_dummies.neutron_sfc_dummy_api as SFC import logging import json import uuid @@ -269,7 +270,7 @@ class NeutronListNetworks(Resource): except Exception as ex: LOG.exception("Neutron: List networks exception.") - return Response(ex.message, status=500, + return Response(str(ex), status=500, mimetype='application/json') @@ -319,7 +320,7 @@ class NeutronShowNetwork(Resource): except Exception as ex: logging.exception("Neutron: Show network exception.") - return Response(ex.message, status=500, + return Response(str(ex), status=500, mimetype='application/json') @@ -350,7 +351,7 @@ class NeutronCreateNetwork(Resource): {"network": net.create_network_dict()}), status=201, mimetype='application/json') except Exception as ex: LOG.exception("Neutron: Create network excepiton.") - return Response(ex.message, status=500, + return Response(str(ex), status=500, mimetype='application/json') @@ -397,7 +398,7 @@ class NeutronUpdateNetwork(Resource): except Exception as ex: LOG.exception("Neutron: Show networks exception.") - return Response(ex.message, status=500, + return Response(str(ex), status=500, mimetype='application/json') @@ -434,7 +435,7 @@ class NeutronDeleteNetwork(Resource): return Response('', status=204, mimetype='application/json') except Exception as ex: LOG.exception("Neutron: Delete network exception.") - return Response(ex.message, status=500, + return Response(str(ex), status=500, mimetype='application/json') @@ -481,7 +482,7 @@ class NeutronListSubnets(Resource): except Exception as ex: LOG.exception("Neutron: List subnets exception.") - return Response(ex.message, status=500, + return Response(str(ex), status=500, mimetype='application/json') @@ -529,7 +530,7 @@ class NeutronShowSubnet(Resource): except Exception as ex: LOG.exception("Neutron: Show subnet exception.") - return Response(ex.message, status=500, + return Response(str(ex), status=500, mimetype='application/json') @@ -589,7 +590,7 @@ class NeutronCreateSubnet(Resource): except Exception as ex: LOG.exception("Neutron: Create network excepiton.") - return Response(ex.message, status=500, + return Response(str(ex), status=500, mimetype='application/json') @@ -643,7 +644,7 @@ class NeutronUpdateSubnet(Resource): except Exception as ex: LOG.exception("Neutron: Show networks exception.") - return Response(ex.message, status=500, + return Response(str(ex), status=500, mimetype='application/json') @@ -691,7 +692,7 @@ class NeutronDeleteSubnet(Resource): status=404, mimetype='application/json') except Exception as ex: LOG.exception("Neutron: Delete subnet exception.") - return Response(ex.message, status=500, + return Response(str(ex), status=500, mimetype='application/json') @@ -717,27 +718,36 @@ class NeutronListPorts(Resource): show_port = NeutronShowPort(self.api) return show_port.get_port(request.args.get('id'), True) - port_list = list() - port_dict = dict() + ports = self.api.compute.ports.values() + if len(id_list) != 0: + ports = filter(lambda port: port.id in id_list, ports) + + device_id = request.args.get('device_id') + if device_id: + server = self.api.compute.find_server_by_name_or_id(device_id) + if not server: + raise RuntimeError("Unable to find server '%s' in order to return it's ports" % server) + + ports = filter(lambda port: ( + any( + filter( + lambda server_port_name_or_id: ( + port.id == server_port_name_or_id or port.name == server_port_name_or_id + ), + server.port_names + ) + ) + ), ports) - if len(id_list) == 0: - for port in self.api.compute.ports.values(): - tmp_port_dict = port.create_port_dict(self.api.compute) - port_list.append(tmp_port_dict) - else: - for port in self.api.compute.ports.values(): - if port.id in id_list: - tmp_port_dict = port.create_port_dict(self.api.compute) - port_list.append(tmp_port_dict) - - port_dict["ports"] = port_list + port_dict = dict() + port_dict["ports"] = list(map(lambda x: x.create_port_dict(self.api.compute), ports)) return Response(json.dumps(port_dict), status=200, mimetype='application/json') except Exception as ex: LOG.exception("Neutron: List ports exception.") - return Response(ex.message, status=500, + return Response(str(ex), status=500, mimetype='application/json') @@ -783,7 +793,7 @@ class NeutronShowPort(Resource): mimetype='application/json') except Exception as ex: LOG.exception("Neutron: Show port exception.") - return Response(ex.message, status=500, + return Response(str(ex), status=500, mimetype='application/json') @@ -816,10 +826,6 @@ class NeutronCreatePort(Resource): num_ports = len(self.api.compute.ports) name = "port:cp%s:man:%s" % (num_ports, str(uuid.uuid4())) - if self.api.compute.find_port_by_name_or_id(name): - return Response("Port with name %s already exists.\n" % - name, status=500, mimetype='application/json') - port = self.api.compute.create_port(name) port.net_name = net.name @@ -851,7 +857,7 @@ class NeutronCreatePort(Resource): mimetype='application/json') except Exception as ex: LOG.exception("Neutron: Show port exception.") - return Response(ex.message, status=500, + return Response(str(ex), status=500, mimetype='application/json') @@ -915,7 +921,7 @@ class NeutronUpdatePort(Resource): mimetype='application/json') except Exception as ex: LOG.exception("Neutron: Update port exception.") - return Response(ex.message, status=500, + return Response(str(ex), status=500, mimetype='application/json') @@ -962,7 +968,7 @@ class NeutronDeletePort(Resource): except Exception as ex: LOG.exception("Neutron: Delete port exception.") - return Response(ex.message, status=500, + return Response(str(ex), status=500, mimetype='application/json') @@ -972,30 +978,23 @@ class NeutronAddFloatingIp(Resource): def get(self): """ - Added a quick and dirty fake for the OSM integration. Returns a list of - floating IPs. Has nothing to do with the setup inside the emulator. - But its enough to make the OSM driver happy. - @PG Sandman: Feel free to improve this and let it do something meaningful. + Returns a Floating IP for a port. + + Currently ports are not mapped to individual IPs, but the + (potentially shared) Docker external IP is returned. """ + port_id = request.args.get("port_id") + if not port_id: + message = "Neutron: List API for FloatingIPs is not implemented" + LOG.exception(message) + return Response(message, status=500, + mimetype='application/json') + port = self.api.compute.find_port_by_name_or_id(port_id) + ip = port.assigned_container.dcinfo["NetworkSettings"]["IPAddress"] resp = dict() - resp["floatingips"] = list() - # create a list of floting IP definitions and return it - for i in range(100, 110): - ip = dict() - ip["router_id"] = "router_id" - ip["description"] = "hardcoded in api" - ip["created_at"] = "router_id" - ip["updated_at"] = "router_id" - ip["revision_number"] = 1 - ip["tenant_id"] = "tenant_id" - ip["project_id"] = "project_id" - ip["floating_network_id"] = str(i) - ip["status"] = "ACTIVE" - ip["id"] = str(i) - ip["port_id"] = "port_id" - ip["floating_ip_address"] = "172.0.0.%d" % i - ip["fixed_ip_address"] = "10.0.0.%d" % i - resp["floatingips"].append(ip) + resp["floatingips"] = [ + {'floating_ip_address': ip} + ] return Response(json.dumps(resp), status=200, mimetype='application/json') @@ -1050,5 +1049,5 @@ class NeutronAddFloatingIp(Resource): mimetype='application/json') except Exception as ex: LOG.exception("Neutron: Create FloatingIP exception %s.", ex) - return Response(ex.message, status=500, + return Response(str(ex), status=500, mimetype='application/json')