Merge "358 - Handling Vnf delete conflicts from RO"
authorvelandy <rajesh.velandy@riftio.com>
Wed, 11 Oct 2017 23:26:18 +0000 (01:26 +0200)
committerGerrit Code Review <root@osm.etsi.org>
Wed, 11 Oct 2017 23:26:18 +0000 (01:26 +0200)
1  2 
rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/openmano_nsm.py

@@@ -161,8 -161,7 +161,8 @@@ class VnfrConsoleOperdataDtsHandler(obj
  
  
  class OpenmanoVnfr(object):
 -    def __init__(self, log, loop, cli_api, http_api, vnfr, nsd, ssh_key=None):
 +    def __init__(self, project, log, loop, cli_api, http_api, vnfr, nsd, ssh_key=None):
 +        self._project = project
          self._log = log
          self._loop = loop
          self._cli_api = cli_api
      @property
      def openmano_vnfd(self):
          self._log.debug("Converting vnfd %s from rift to openmano", self.vnfd.id)
 -        openmano_vnfd = rift2openmano.rift2openmano_vnfd(self.vnfd, self.nsd, self._http_api)
 +        openmano_vnfd = rift2openmano.rift2openmano_vnfd(self.vnfd, self.nsd, self._http_api, self._project)
          return openmano_vnfd
  
      @property
          if self._vnf_id is None:
              self._log.warning("Openmano vnf id not set.  Cannot delete.")
              return
-         self._cli_api.vnf_delete(self._vnf_id)
+         try:
+             self._cli_api.vnf_delete(self._vnf_id)
+         except Exception as e:
+             self._log.error(e)
+             raise e
  
  class OpenmanoNSRecordState(Enum):
      """ Network Service Record State """
@@@ -573,7 -574,7 +575,7 @@@ class OpenmanoNsr(object)
  
      @asyncio.coroutine
      def add_vnfr(self, vnfr):
 -        vnfr = OpenmanoVnfr(self._log, self._loop, self._cli_api, self.http_api,
 +        vnfr = OpenmanoVnfr(self._project, self._log, self._loop, self._cli_api, self.http_api,
                                  vnfr, nsd=self.nsd, ssh_key=self._ssh_key)
          yield from vnfr.create()
          self._vnfrs.append(vnfr)
              deleted_vnf_id_list = []
              for vnfr in self._vnfrs:
                  if vnfr.vnfr.vnfd.id not in deleted_vnf_id_list:
-                     vnfr.delete()
+                     try:
+                         vnfr.delete()
+                     except Exception as e:
+                         self._log.error("Failed to delete the vnf at the RO")
+                         if "Resource is not free" in str(e):
+                             self._log.error("Resource is not free, hence forego the vnf-delete")
+                         else:
+                             raise e
                      deleted_vnf_id_list.append(vnfr.vnfr.vnfd.id)
  
      @asyncio.coroutine
@@@ -1207,8 -1215,12 +1216,12 @@@ class OpenmanoNsPlugin(nsmpluginbase.Ns
          del self._openmano_nsrs[nsr_id]
  
      def terminate(self, openmano_nsr):
-         openmano_nsr.terminate()
-         openmano_nsr.delete()
+         try:
+             openmano_nsr.terminate()
+             openmano_nsr.delete()
+         except Exception as e:
+             self._log.error("The NSR terminate failed for {}".format(openmano_nsr))
+             raise e
  
      @asyncio.coroutine
      def terminate_vnf(self, nsr, vnfr, scalein=False):
          if scalein:
              self._log.debug("Terminating Scaling VNFR - {}".format(vnfr))
              openmano_vnf_nsr = self._openmano_nsr_by_vnfr_id[vnfr.id]
-             openmano_vnf_nsr.terminate()
-             openmano_vnf_nsr.delete()
+             try:
+                 openmano_vnf_nsr.terminate()
+                 openmano_vnf_nsr.delete()
+             except Exception as e:
+                 self._log.error("The NSR terminate failed for {}".format(openmano_nsr))
+                 raise e
              yield from openmano_vnf_nsr.remove_vnf(vnfr)
  
      @asyncio.coroutine