X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=src%2Femuvim%2Fapi%2Fsonata%2Fdummygatekeeper.py;h=7d1f525ac8eaf3cad1b9b55702b2f704e2fcef3d;hb=c6ace2d9c93a95405acabc7b72a0a6672c01dae3;hp=ff217f075bf283aaeb82cdae582676aa16785cbc;hpb=0bb3d47c04f09934885a06f987ff4f520ed5daac;p=osm%2Fvim-emu.git diff --git a/src/emuvim/api/sonata/dummygatekeeper.py b/src/emuvim/api/sonata/dummygatekeeper.py index ff217f0..7d1f525 100755 --- a/src/emuvim/api/sonata/dummygatekeeper.py +++ b/src/emuvim/api/sonata/dummygatekeeper.py @@ -47,6 +47,7 @@ import pkg_resources from subprocess import Popen from random import randint import ipaddress +import copy logging.basicConfig() LOG = logging.getLogger("sonata-dummy-gatekeeper") @@ -74,7 +75,13 @@ DEPLOY_SAP = False BIDIRECTIONAL_CHAIN = False # override the management interfaces in the descriptors with default docker0 interfaces in the containers -USE_DOCKER_MGMT = True +USE_DOCKER_MGMT = False + +# automatically deploy uploaded packages (no need to execute son-access deploy --latest separately) +AUTO_DEPLOY = False + +# and also automatically terminate any other running services +AUTO_DELETE = False def generate_subnets(prefix, base, subnet_size=50, mask=24): # Generate a list of ipaddress in subnets @@ -91,6 +98,8 @@ ELAN_SUBNETS = generate_subnets('10.20', 0, subnet_size=50, mask=24) # 10.30.xxx.0/30 ELINE_SUBNETS = generate_subnets('10.30', 0, subnet_size=50, mask=30) +# path to the VNFD for the SAP VNF that is deployed as internal SAP point +SAP_VNFD=None class Gatekeeper(object): @@ -241,6 +250,12 @@ class Service(object): for v in vnf_instances: self._stop_vnfi(v) + for sap_name in self.saps_ext: + ext_sap = self.saps[sap_name] + target_dc = ext_sap.get("dc") + target_dc.removeExternalSAP(sap_name, ext_sap['net']) + LOG.info("Stopping the SAP instance: %r in DC %r" % (sap_name, target_dc)) + if not GK_STANDALONE_MODE: # remove placement? # self._remove_placement(RoundRobinPlacement) @@ -478,7 +493,6 @@ class Service(object): # create list of all SAPs # check if we need to deploy management ports if USE_DOCKER_MGMT: - LOG.debug("nsd: {0}".format(self.nsd)) SAPs = [p for p in self.nsd["connection_points"] if 'management' not in p.get('type')] else: SAPs = [p for p in self.nsd["connection_points"]] @@ -502,7 +516,10 @@ class Service(object): # Each Service Access Point (connection_point) in the nsd is getting its own container (default) elif sap["type"] == "internal" or sap["type"] == "management": # add SAP to self.vnfds - sapfile = pkg_resources.resource_filename(__name__, "sap_vnfd.yml") + if SAP_VNFD is None: + sapfile = pkg_resources.resource_filename(__name__, "sap_vnfd.yml") + else: + sapfile = SAP_VNFD sap_vnfd = load_yaml(sapfile) sap_vnfd["connection_points"][0]["id"] = sap_interface sap_vnfd["name"] = sap_docker_name @@ -935,9 +952,26 @@ class Packages(fr.Resource): with open(upload_path, 'wb') as f: f.write(son_file) size = os.path.getsize(upload_path) + + # first stop and delete any other running services + if AUTO_DELETE: + service_list = copy.copy(GK.services) + for service_uuid in service_list: + instances_list = copy.copy(GK.services[service_uuid].instances) + for instance_uuid in instances_list: + # valid service and instance UUID, stop service + GK.services.get(service_uuid).stop_service(instance_uuid) + LOG.info("service instance with uuid %r stopped." % instance_uuid) + # create a service object and register it s = Service(service_uuid, file_hash, upload_path) GK.register_service_package(service_uuid, s) + + # automatically deploy the service + if AUTO_DEPLOY: + # ok, we have a service uuid, lets start the service + service_instance_uuid = GK.services.get(service_uuid).start_service() + # generate the JSON result return {"service_uuid": service_uuid, "size": size, "sha1": file_hash, "error": None}, 201 except Exception as ex: