From d454d54713526a24da1ffbc513f1e00a1ff44f66 Mon Sep 17 00:00:00 2001 From: edmaas Date: Thu, 29 Sep 2016 13:19:22 +0200 Subject: [PATCH] added stubs for stopping a running service and implemented removing a vnfd --- src/emuvim/api/sonata/dummygatekeeper.py | 44 +++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/src/emuvim/api/sonata/dummygatekeeper.py b/src/emuvim/api/sonata/dummygatekeeper.py index 8a9416c..2a994bd 100755 --- a/src/emuvim/api/sonata/dummygatekeeper.py +++ b/src/emuvim/api/sonata/dummygatekeeper.py @@ -258,6 +258,18 @@ class Service(object): LOG.info("Service started. Instance id: %r" % instance_uuid) return instance_uuid + def stop_service(self): + """ + This method stops a running service instance. + It iterates over all VNFDs, stopping them each + and removing them from their data center. + + :return: + """ + + + + def _start_vnfd(self, vnfd): """ Start a single VNFD of this service @@ -296,6 +308,20 @@ class Service(object): vnfi = target_dc.startCompute(self.vnf_name2docker_name[vnf_name], network=intfs, image=docker_name, flavor_name="small") return vnfi + def _stop_vnfd(self, vnf_name): + """ + Stop a VNFD specified by its name. + + :param vnf_name: Name of the vnf to be stopped + :return: + """ + if vnf_name not in self.vnfds: + raise Exception("VNFD with name %s not found." % vnf_name) + vnfd = self.vnfds[vnf_name] + dc = vnfd.get("dc") + LOG.info("Stopping %r contained in %r in DC %r" % (vnf_name, self.vnf_name2docker_name[vnf_name], dc) + dc.stopCompute(self.vnf_name2docker_name[vnf_name]) + def _get_vnf_instance(self, instance_uuid, name): """ Returns the Docker object for the given VNF name (or Docker name). @@ -511,7 +537,7 @@ class RoundRobinDcPlacement(object): """ def place(self, nsd, vnfds, dcs): c = 0 - dcs_list = list(dcs.itervalues()) + dcs_list = list(dcs.itervalues()) for name, vnfd in vnfds.iteritems(): vnfd["dc"] = dcs_list[c % len(dcs_list)] c += 1 # inc. c to use next DC @@ -602,6 +628,22 @@ class Instantiations(fr.Resource): return {"service_instantiations_list": [ list(s.instances.iterkeys()) for s in GK.services.itervalues()]} + def delete(self): + """ + Stops a running service specified by its UUID. + + :return: + """ + # try to extract the service UUID from the request + json_data = request.get_json(force=True) + service_uuid = json_data.get("service_uuid") + + if service_uuid in GK.services: + # valid service UUID, stop service + GK.services.get(service_uuid).stop_service() + return "", 0 + return "Service not found", 404 + # create a single, global GK object GK = Gatekeeper() -- 2.25.1