From: edmaas Date: Mon, 15 May 2017 12:51:59 +0000 (+0200) Subject: added execution of stop scripts in vnfs X-Git-Tag: v3.1~25^2~1 X-Git-Url: https://osm.etsi.org/gitweb/?a=commitdiff_plain;h=0b532e38d2ccfaac7b6520d5e05c890bd2cab5ba;p=osm%2Fvim-emu.git added execution of stop scripts in vnfs --- diff --git a/src/emuvim/api/sonata/dummygatekeeper.py b/src/emuvim/api/sonata/dummygatekeeper.py index 151e5b3..759ed41 100755 --- a/src/emuvim/api/sonata/dummygatekeeper.py +++ b/src/emuvim/api/sonata/dummygatekeeper.py @@ -48,6 +48,7 @@ from subprocess import Popen from random import randint import ipaddress import copy +import time logging.basicConfig() LOG = logging.getLogger("sonata-dummy-gatekeeper") @@ -101,6 +102,9 @@ 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 +# Time in seconds to wait for vnf stop scripts to execute fully +VNF_STOP_WAIT_TIME = 5 + class Gatekeeper(object): def __init__(self): @@ -242,6 +246,10 @@ class Service(object): # instance_uuid = str(self.uuid.uuid4()) vnf_instances = self.instances[instance_uuid]["vnf_instances"] + # trigger stop skripts in vnf instances and wait a few seconds for completion + self._trigger_emulator_stop_scripts_in_vnfis(vnf_instances) + time.sleep(VNF_STOP_WAIT_TIME) + for v in vnf_instances: self._stop_vnfi(v) @@ -432,6 +440,21 @@ class Service(object): t.daemon = True t.start() + def _trigger_emulator_stop_scripts_in_vnfis(self, vnfi_list): + for vnfi in vnfi_list: + config = vnfi.dcinfo.get("Config", dict()) + env = config.get("Env", list()) + for env_var in env: + var, cmd = map(str.strip, map(str, env_var.split('=', 1))) + if var=="SON_EMU_CMD_STOP": + LOG.info("Executing stop script in %r: %r" % (vnfi.name, cmd)) + # execute command in new thread to ensure that GK is not blocked by VNF + t = threading.Thread(target=vnfi.cmdPrint, args=(cmd,)) + t.daemon = True + t.start() + + + def _unpack_service_package(self): """ unzip *.son file and store contents in CATALOG_FOLDER/services//