X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwlaunchpad%2Fplugins%2Frwnsm%2Frift%2Ftasklets%2Frwnsmtasklet%2Fopenmano_nsm.py;h=5ca0f3f7aeb8ab7625cbde91758b95ffdf0baf26;hb=8c00490fb3a93a707daf86be0c198d86c77d92a0;hp=db08e8e76c1ad42db5645b03e2513520ca965c3f;hpb=5a327cd48a7bfea78c3d11ec4143f72d103a8afc;p=osm%2FSO.git diff --git a/rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/openmano_nsm.py b/rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/openmano_nsm.py index db08e8e7..5ca0f3f7 100644 --- a/rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/openmano_nsm.py +++ b/rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/openmano_nsm.py @@ -70,6 +70,9 @@ def dump_openmano_descriptor(name, descriptor_str): return filepath +class VNFExistError(Exception): + pass + class VnfrConsoleOperdataDtsHandler(object): """ registers 'D,/vnfr:vnfr-console/vnfr:vnfr[id]/vdur[id]' and handles CRUD from DTS""" @property @@ -505,6 +508,16 @@ class OpenmanoNsr(object): yield from self._publisher.unpublish_vlr(None, vlr.vlr_msg) yield from asyncio.sleep(1, loop=self._loop) + @asyncio.coroutine + def remove_vnf(self,vnf): + if vnf in self._vnfrs: + self._vnfrs.remove(vnf) + yield from self._publisher.unpublish_vnfr( + None, + vnfr_msg + ) + yield from asyncio.sleep(1, loop=self._loop) + @asyncio.coroutine def delete_vlr(self, vlr): if vlr in self._vlrs: @@ -528,7 +541,6 @@ class OpenmanoNsr(object): def add_nsr(self, nsr, vnfr): self._nsrs[vnfr.id] = nsr - @asyncio.coroutine def delete(self): if not self._created: self._log.debug("NSD wasn't created. Skipping delete.") @@ -916,7 +928,8 @@ class OpenmanoNsPlugin(rwnsmplugin.NsmPluginBase): self._cli_api = None self._http_api = None self._openmano_nsrs = {} - self._vnfr_uptime_tasks = {} + self._openmano_nsr_by_vnfr_id = {} + #self._nsr_uuid = None self._set_ro_account(ro_account) @@ -993,9 +1006,14 @@ class OpenmanoNsPlugin(rwnsmplugin.NsmPluginBase): openmano_nsr.nsd_msg, openmano_nsr.nsr_config_msg, openmano_nsr.key_pairs, - #openmano_nsr.nsr_msg, vnfr.vnfd.id ) + self._openmano_nsr_by_vnfr_id[nsr.id] = openmano_nsr + if vnfr.id in self._openmano_nsr_by_vnfr_id: + raise VNFExistError("VNF %s already exist", vnfr.id) + self._openmano_nsr_by_vnfr_id[vnfr.id] = openmano_vnf_nsr + self._log.debug("VNFRID %s %s %s", type(self._openmano_nsr_by_vnfr_id), type(openmano_vnf_nsr), type(self._openmano_nsr_by_vnfr_id[vnfr.id])) + for vlr in openmano_nsr.vlrs: yield from openmano_vnf_nsr.add_vlr(vlr) try: @@ -1025,18 +1043,6 @@ class OpenmanoNsPlugin(rwnsmplugin.NsmPluginBase): self._log.debug("Attempting to publish openmano vnf: %s", vnfr_msg) with self._dts.transaction() as xact: yield from self._publisher.publish_vnfr(xact, vnfr_msg) - self._log.debug("Creating a task to update uptime for vnfr: %s", vnfr.id) - self._vnfr_uptime_tasks[vnfr.id] = self._loop.create_task(self.vnfr_uptime_update(vnfr)) - - def vnfr_uptime_update(self, vnfr): - try: - vnfr_ = RwVnfrYang.YangData_Vnfr_VnfrCatalog_Vnfr.from_dict({'id': vnfr.id}) - while True: - vnfr_.uptime = int(time.time()) - vnfr._create_time - yield from self._publisher.publish_vnfr(None, vnfr_) - yield from asyncio.sleep(2, loop=self._loop) - except asyncio.CancelledError: - self._log.debug("Received cancellation request for vnfr_uptime_update task") @asyncio.coroutine def instantiate_vl(self, nsr, vlr): @@ -1080,12 +1086,15 @@ class OpenmanoNsPlugin(rwnsmplugin.NsmPluginBase): openmano_nsr.delete() @asyncio.coroutine - def terminate_vnf(self, vnfr): + def terminate_vnf(self, nsr, vnfr, scalein=False): """ Terminate the network service """ - if vnfr.id in self._vnfr_uptime_tasks: - self._vnfr_uptime_tasks[vnfr.id].cancel() + if scalein: + openmano_vnf_nsr = self._openmano_nsr_by_vnfr_id[vnfr.id] + openmano_vnf_nsr.terminate() + openmano_vnf_nsr.delete() + yield from openmano_vnf_nsr.remove_vnf(vnfr) @asyncio.coroutine def terminate_vl(self, vlr):