X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2Fvim-emu.git;a=blobdiff_plain;f=src%2Femuvim%2Fapi%2Fopenstack%2Fopenstack_dummies%2Fneutron_dummy_api.py;h=9835bcdeacfa4fff8bb25f7934c3c27adcc33473;hp=03c01c1cf1b761326d05c3541ba619c4d386792a;hb=7b38ee1ed94ec3e9124e8e5b9c21cf224d39edc3;hpb=00199782de7042b51927bbbac5540d6f671597bb diff --git a/src/emuvim/api/openstack/openstack_dummies/neutron_dummy_api.py b/src/emuvim/api/openstack/openstack_dummies/neutron_dummy_api.py old mode 100644 new mode 100755 index 03c01c1..9835bcd --- a/src/emuvim/api/openstack/openstack_dummies/neutron_dummy_api.py +++ b/src/emuvim/api/openstack/openstack_dummies/neutron_dummy_api.py @@ -2,11 +2,14 @@ from flask_restful import Resource from flask import request, Response from emuvim.api.openstack.openstack_dummies.base_openstack_dummy import BaseOpenstackDummy from datetime import datetime +import neutron_sfc_dummy_api as SFC import logging import json import uuid import copy +LOG = logging.getLogger("api.openstack.neutron") + class NeutronDummyApi(BaseOpenstackDummy): def __init__(self, ip, port, compute): @@ -49,8 +52,65 @@ class NeutronDummyApi(BaseOpenstackDummy): self.api.add_resource(NeutronAddFloatingIp, "/v2.0/floatingips.json", "/v2.0/floatingips", resource_class_kwargs={'api': self}) + # Service Function Chaining (SFC) API + self.api.add_resource(SFC.PortPairsCreate, "/v2.0/sfc/port_pairs.json", "/v2.0/sfc/port_pairs", + resource_class_kwargs={'api': self}) + self.api.add_resource(SFC.PortPairsUpdate, "/v2.0/sfc/port_pairs/.json", + "/v2.0/sfc/port_pairs/", + resource_class_kwargs={'api': self}) + self.api.add_resource(SFC.PortPairsDelete, "/v2.0/sfc/port_pairs/.json", + "/v2.0/sfc/port_pairs/", + resource_class_kwargs={'api': self}) + self.api.add_resource(SFC.PortPairsList, "/v2.0/sfc/port_pairs.json", "/v2.0/sfc/port_pairs", + resource_class_kwargs={'api': self}) + self.api.add_resource(SFC.PortPairsShow, "/v2.0/sfc/port_pairs/.json", + "/v2.0/sfc/port_pairs/", + resource_class_kwargs={'api': self}) + + self.api.add_resource(SFC.PortPairGroupCreate, "/v2.0/sfc/port_pair_groups.json", "/v2.0/sfc/port_pair_groups", + resource_class_kwargs={'api': self}) + self.api.add_resource(SFC.PortPairGroupUpdate, "/v2.0/sfc/port_pair_groups/.json", + "/v2.0/sfc/port_pair_groups/", + resource_class_kwargs={'api': self}) + self.api.add_resource(SFC.PortPairGroupDelete, "/v2.0/sfc/port_pair_groups/.json", + "/v2.0/sfc/port_pair_groups/", + resource_class_kwargs={'api': self}) + self.api.add_resource(SFC.PortPairGroupList, "/v2.0/sfc/port_pair_groups.json", "/v2.0/sfc/port_pair_groups", + resource_class_kwargs={'api': self}) + self.api.add_resource(SFC.PortPairGroupShow, "/v2.0/sfc/port_pair_groups/.json", + "/v2.0/sfc/port_pair_groups/", + resource_class_kwargs={'api': self}) + + self.api.add_resource(SFC.FlowClassifierCreate, "/v2.0/sfc/flow_classifiers.json", "/v2.0/sfc/flow_classifiers", + resource_class_kwargs={'api': self}) + self.api.add_resource(SFC.FlowClassifierUpdate, "/v2.0/sfc/flow_classifiers/.json", + "/v2.0/sfc/flow_classifiers/", + resource_class_kwargs={'api': self}) + self.api.add_resource(SFC.FlowClassifierDelete, "/v2.0/sfc/flow_classifiers/.json", + "/v2.0/sfc/flow_classifiers/", + resource_class_kwargs={'api': self}) + self.api.add_resource(SFC.FlowClassifierList, "/v2.0/sfc/flow_classifiers.json", "/v2.0/sfc/flow_classifiers", + resource_class_kwargs={'api': self}) + self.api.add_resource(SFC.FlowClassifierShow, "/v2.0/sfc/flow_classifiers/.json", + "/v2.0/sfc/flow_classifiers/", + resource_class_kwargs={'api': self}) + + self.api.add_resource(SFC.PortChainCreate, "/v2.0/sfc/port_chains.json", "/v2.0/sfc/port_chains", + resource_class_kwargs={'api': self}) + self.api.add_resource(SFC.PortChainUpdate, "/v2.0/sfc/port_chains/.json", + "/v2.0/sfc/port_chains/", + resource_class_kwargs={'api': self}) + self.api.add_resource(SFC.PortChainDelete, "/v2.0/sfc/port_chains/.json", + "/v2.0/sfc/port_chains/", + resource_class_kwargs={'api': self}) + self.api.add_resource(SFC.PortChainList, "/v2.0/sfc/port_chains.json", "/v2.0/sfc/port_chains", + resource_class_kwargs={'api': self}) + self.api.add_resource(SFC.PortChainShow, "/v2.0/sfc/port_chains/.json", + "/v2.0/sfc/port_chains/", + resource_class_kwargs={'api': self}) + def _start_flask(self): - logging.info("Starting %s endpoint @ http://%s:%d" % (__name__, self.ip, self.port)) + LOG.info("Starting %s endpoint @ http://%s:%d" % (__name__, self.ip, self.port)) if self.app is not None: self.app.before_request(self.dump_playbook) self.app.run(self.ip, self.port, debug=True, use_reloader=False) @@ -58,7 +118,7 @@ class NeutronDummyApi(BaseOpenstackDummy): class Shutdown(Resource): def get(self): - logging.debug(("%s is beeing shut down") % (__name__)) + LOG.debug(("%s is beeing shut down") % (__name__)) func = request.environ.get('werkzeug.server.shutdown') if func is None: raise RuntimeError('Not running with the Werkzeug Server') @@ -73,7 +133,7 @@ class NeutronListAPIVersions(Resource): :return: Returns a json with API versions. :rtype: :class:`flask.response` """ - logging.debug("API CALL: Neutron - List API Versions") + LOG.debug("API CALL: Neutron - List API Versions") resp = dict() resp['versions'] = dict() @@ -100,7 +160,7 @@ class NeutronShowAPIv2Details(Resource): :return: Returns a json with API details. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s GET" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s GET" % str(self.__class__.__name__)) resp = dict() resp['resources'] = dict() @@ -151,7 +211,7 @@ class NeutronListNetworks(Resource): :return: Returns a json response, starting with 'networks' as root node. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s GET" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s GET" % str(self.__class__.__name__)) try: if request.args.get('name'): tmp_network = NeutronShowNetwork(self.api) @@ -181,7 +241,7 @@ class NeutronListNetworks(Resource): return Response(json.dumps(network_dict), status=200, mimetype='application/json') except Exception as ex: - logging.exception("Neutron: List networks exception.") + LOG.exception("Neutron: List networks exception.") return Response(ex.message, status=500, mimetype='application/json') @@ -198,7 +258,7 @@ class NeutronShowNetwork(Resource): :return: Returns a json response, starting with 'network' as root node and one network description. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s GET" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s GET" % str(self.__class__.__name__)) return self.get_network(network_id, False) def get_network(self, network_name_or_id, as_list): @@ -245,7 +305,7 @@ class NeutronCreateNetwork(Resource): * 201, if everything worked out. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s POST" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s POST" % str(self.__class__.__name__)) try: network_dict = json.loads(request.data) name = network_dict['network']['name'] @@ -256,7 +316,7 @@ class NeutronCreateNetwork(Resource): net = self.api.compute.create_network(name) return Response(json.dumps({"network": net.create_network_dict()}), status=201, mimetype='application/json') except Exception as ex: - logging.exception("Neutron: Create network excepiton.") + LOG.exception("Neutron: Create network excepiton.") return Response(ex.message, status=500, mimetype='application/json') @@ -275,7 +335,7 @@ class NeutronUpdateNetwork(Resource): * 200, if everything worked out. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s PUT" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s PUT" % str(self.__class__.__name__)) try: if network_id in self.api.compute.nets: net = self.api.compute.nets[network_id] @@ -300,7 +360,7 @@ class NeutronUpdateNetwork(Resource): return Response('Network not found.\n', status=404, mimetype='application/json') except Exception as ex: - logging.exception("Neutron: Show networks exception.") + LOG.exception("Neutron: Show networks exception.") return Response(ex.message, status=500, mimetype='application/json') @@ -319,7 +379,7 @@ class NeutronDeleteNetwork(Resource): * 204, if everything worked out. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s DELETE" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s DELETE" % str(self.__class__.__name__)) try: if network_id not in self.api.compute.nets: return Response('Could not find network. (' + network_id + ')\n', @@ -336,7 +396,7 @@ class NeutronDeleteNetwork(Resource): return Response('Network ' + str(network_id) + ' deleted.\n', status=204, mimetype='application/json') except Exception as ex: - logging.exception("Neutron: Delete network exception.") + LOG.exception("Neutron: Delete network exception.") return Response(ex.message, status=500, mimetype='application/json') @@ -352,7 +412,7 @@ class NeutronListSubnets(Resource): :return: Returns a json response, starting with 'subnets' as root node. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s GET" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s GET" % str(self.__class__.__name__)) try: if request.args.get('name'): show_subnet = NeutronShowSubnet(self.api) @@ -381,7 +441,7 @@ class NeutronListSubnets(Resource): return Response(json.dumps(subnet_dict), status=200, mimetype='application/json') except Exception as ex: - logging.exception("Neutron: List subnets exception.") + LOG.exception("Neutron: List subnets exception.") return Response(ex.message, status=500, mimetype='application/json') @@ -398,7 +458,7 @@ class NeutronShowSubnet(Resource): :return: Returns a json response, starting with 'subnet' as root node and one subnet description. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s GET" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s GET" % str(self.__class__.__name__)) return self.get_subnet(subnet_id, False) def get_subnet(self, subnet_name_or_id, as_list): @@ -426,7 +486,7 @@ class NeutronShowSubnet(Resource): return Response('Subnet not found. (' + subnet_name_or_id + ')\n', status=404, mimetype='application/json') except Exception as ex: - logging.exception("Neutron: Show subnet exception.") + LOG.exception("Neutron: Show subnet exception.") return Response(ex.message, status=500, mimetype='application/json') @@ -445,7 +505,7 @@ class NeutronCreateSubnet(Resource): * 201, if everything worked out. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s POST" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s POST" % str(self.__class__.__name__)) try: subnet_dict = json.loads(request.data) net = self.api.compute.find_network_by_name_or_id(subnet_dict['subnet']['network_id']) @@ -461,7 +521,7 @@ class NeutronCreateSubnet(Resource): net.subnet_id = subnet_dict["subnet"]["id"] else: net.subnet_id = str(uuid.uuid4()) - import emuvim.api.heat.ip_handler as IP + import emuvim.api.openstack.ip_handler as IP net.set_cidr(IP.get_new_cidr(net.subnet_id)) if "tenant_id" in subnet_dict["subnet"]: @@ -478,7 +538,7 @@ class NeutronCreateSubnet(Resource): return Response(json.dumps({'subnet': net.create_subnet_dict()}), status=201, mimetype='application/json') except Exception as ex: - logging.exception("Neutron: Create network excepiton.") + LOG.exception("Neutron: Create network excepiton.") return Response(ex.message, status=500, mimetype='application/json') @@ -497,7 +557,7 @@ class NeutronUpdateSubnet(Resource): * 200, if everything worked out. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s PUT" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s PUT" % str(self.__class__.__name__)) try: for net in self.api.compute.nets.values(): if net.subnet_id == subnet_id: @@ -529,7 +589,7 @@ class NeutronUpdateSubnet(Resource): return Response('Network not found.\n', status=404, mimetype='application/json') except Exception as ex: - logging.exception("Neutron: Show networks exception.") + LOG.exception("Neutron: Show networks exception.") return Response(ex.message, status=500, mimetype='application/json') @@ -548,7 +608,7 @@ class NeutronDeleteSubnet(Resource): * 204, if everything worked out. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s DELETE" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s DELETE" % str(self.__class__.__name__)) try: for net in self.api.compute.nets.values(): if net.subnet_id == subnet_id: @@ -570,7 +630,7 @@ class NeutronDeleteSubnet(Resource): return Response('Could not find subnet.', status=404, mimetype='application/json') except Exception as ex: - logging.exception("Neutron: Delete subnet exception.") + LOG.exception("Neutron: Delete subnet exception.") return Response(ex.message, status=500, mimetype='application/json') @@ -586,7 +646,7 @@ class NeutronListPorts(Resource): :return: Returns a json response, starting with 'ports' as root node. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s GET" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s GET" % str(self.__class__.__name__)) try: if request.args.get('name'): show_port = NeutronShowPort(self.api) @@ -614,7 +674,7 @@ class NeutronListPorts(Resource): return Response(json.dumps(port_dict), status=200, mimetype='application/json') except Exception as ex: - logging.exception("Neutron: List ports exception.") + LOG.exception("Neutron: List ports exception.") return Response(ex.message, status=500, mimetype='application/json') @@ -631,7 +691,7 @@ class NeutronShowPort(Resource): :return: Returns a json response, starting with 'port' as root node and one network description. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s GET" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s GET" % str(self.__class__.__name__)) return self.get_port(port_id, False) def get_port(self, port_name_or_id, as_list): @@ -657,7 +717,7 @@ class NeutronShowPort(Resource): tmp_dict["port"] = tmp_port_dict return Response(json.dumps(tmp_dict), status=200, mimetype='application/json') except Exception as ex: - logging.exception("Neutron: Show port exception.") + LOG.exception("Neutron: Show port exception.") return Response(ex.message, status=500, mimetype='application/json') @@ -674,7 +734,7 @@ class NeutronCreatePort(Resource): * 201, if everything worked out. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s POST" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s POST" % str(self.__class__.__name__)) try: port_dict = json.loads(request.data) net_id = port_dict['port']['network_id'] @@ -721,7 +781,7 @@ class NeutronCreatePort(Resource): return Response(json.dumps({'port': port.create_port_dict(self.api.compute)}), status=201, mimetype='application/json') except Exception as ex: - logging.exception("Neutron: Show port exception.") + LOG.exception("Neutron: Show port exception.") return Response(ex.message, status=500, mimetype='application/json') @@ -740,7 +800,7 @@ class NeutronUpdatePort(Resource): * 200, if everything worked out. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s PUT" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s PUT" % str(self.__class__.__name__)) try: port_dict = json.loads(request.data) port = self.api.compute.find_port_by_name_or_id(port_id) @@ -782,7 +842,7 @@ class NeutronUpdatePort(Resource): return Response(json.dumps({'port': port.create_port_dict(self.api.compute)}), status=200, mimetype='application/json') except Exception as ex: - logging.exception("Neutron: Update port exception.") + LOG.exception("Neutron: Update port exception.") return Response(ex.message, status=500, mimetype='application/json') @@ -801,7 +861,7 @@ class NeutronDeletePort(Resource): * 204, if everything worked out. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s DELETE" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s DELETE" % str(self.__class__.__name__)) try: port = self.api.compute.find_port_by_name_or_id(port_id) if port is None: @@ -826,7 +886,7 @@ class NeutronDeletePort(Resource): return Response('Port ' + port_id + ' deleted.\n', status=204, mimetype='application/json') except Exception as ex: - logging.exception("Neutron: Delete port exception.") + LOG.exception("Neutron: Delete port exception.") return Response(ex.message, status=500, mimetype='application/json') @@ -845,7 +905,7 @@ class NeutronAddFloatingIp(Resource): resp["floatingips"] = list() # create a list of floting IP definitions and return it for i in range(100, 110): - ip=dict() + ip = dict() ip["router_id"] = "router_id" ip["description"] = "hardcoded in api" ip["created_at"] = "router_id" @@ -862,7 +922,6 @@ class NeutronAddFloatingIp(Resource): resp["floatingips"].append(ip) return Response(json.dumps(resp), status=200, mimetype='application/json') - def post(self): """ Adds a floating IP to neutron. @@ -870,7 +929,7 @@ class NeutronAddFloatingIp(Resource): :return: Returns a floating network description. :rtype: :class:`flask.response` """ - logging.debug("API CALL: %s POST" % str(self.__class__.__name__)) + LOG.debug("API CALL: %s POST" % str(self.__class__.__name__)) try: # Fiddle with floating_network ! req = json.loads(request.data) @@ -911,5 +970,5 @@ class NeutronAddFloatingIp(Resource): return Response(json.dumps(response), status=200, mimetype='application/json') except Exception as ex: - logging.exception("Neutron: Create FloatingIP exception %s.", ex) + LOG.exception("Neutron: Create FloatingIP exception %s.", ex) return Response(ex.message, status=500, mimetype='application/json')