X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=NG-RO%2Fosm_ng_ro%2Fns_thread.py;h=9ed04d7bd6e894e01a6bd7710065a2e263d5edf2;hb=refs%2Fchanges%2F86%2F11986%2F11;hp=617f58bb8d70db21063ca8c7c068bb1022875198;hpb=8658c2cd33bcea66c9b99aabb0825071c5c42df0;p=osm%2FRO.git diff --git a/NG-RO/osm_ng_ro/ns_thread.py b/NG-RO/osm_ng_ro/ns_thread.py index 617f58bb..9ed04d7b 100644 --- a/NG-RO/osm_ng_ro/ns_thread.py +++ b/NG-RO/osm_ng_ro/ns_thread.py @@ -391,6 +391,11 @@ class VimInteractionVdu(VimInteractionBase): vim_vm_id, created_items = target_vim.new_vminstance(**params_copy) interfaces = [iface["vim_id"] for iface in params_copy["net_list"]] + # add to created items previous_created_volumes (healing) + if task.get("previous_created_volumes"): + for k, v in task["previous_created_volumes"].items(): + created_items[k] = v + ro_vim_item_update = { "vim_id": vim_vm_id, "vim_status": "BUILD", @@ -400,6 +405,7 @@ class VimInteractionVdu(VimInteractionBase): "vim_message": None, "interfaces_vim_ids": interfaces, "interfaces": [], + "interfaces_backup": [], } self.logger.debug( "task={} {} new-vm={} created={}".format( @@ -881,6 +887,48 @@ class VimInteractionAffinityGroup(VimInteractionBase): return "FAILED", ro_vim_item_update +class VimInteractionUpdateVdu(VimInteractionBase): + def exec(self, ro_task, task_index, task_depends): + task = ro_task["tasks"][task_index] + task_id = task["task_id"] + db_task_update = {"retries": 0} + created = False + created_items = {} + target_vim = self.my_vims[ro_task["target_id"]] + + try: + if task.get("params"): + vim_vm_id = task["params"].get("vim_vm_id") + action = task["params"].get("action") + context = {action: action} + target_vim.action_vminstance(vim_vm_id, context) + # created = True + ro_vim_item_update = { + "vim_id": vim_vm_id, + "vim_status": "DONE", + "created": created, + "created_items": created_items, + "vim_details": None, + "vim_message": None, + } + self.logger.debug( + "task={} {} vm-migration done".format(task_id, ro_task["target_id"]) + ) + return "DONE", ro_vim_item_update, db_task_update + except (vimconn.VimConnException, NsWorkerException) as e: + self.logger.error( + "task={} vim={} VM Migration:" + " {}".format(task_id, ro_task["target_id"], e) + ) + ro_vim_item_update = { + "vim_status": "VIM_ERROR", + "created": created, + "vim_message": str(e), + } + + return "FAILED", ro_vim_item_update, db_task_update + + class VimInteractionSdnNet(VimInteractionBase): @staticmethod def _match_pci(port_pci, mapping): @@ -1398,6 +1446,9 @@ class NsWorker(threading.Thread): "sdn_net": VimInteractionSdnNet( self.db, self.my_vims, self.db_vims, self.logger ), + "update": VimInteractionUpdateVdu( + self.db, self.my_vims, self.db_vims, self.logger + ), "affinity-or-anti-affinity-group": VimInteractionAffinityGroup( self.db, self.my_vims, self.db_vims, self.logger ), @@ -2410,6 +2461,7 @@ class NsWorker(threading.Thread): "vim_name", "vim_status", "interfaces", + "interfaces_backup", ) } @@ -2463,6 +2515,21 @@ class NsWorker(threading.Thread): ).split(";")[0] self.db.set_one(table, q_filter={"_id": _id}, update_dict=update_dict) + + # If interfaces exists, it backups VDU interfaces in the DB for healing operations + if ro_vim_item_update.get("interfaces"): + search_key = path_vim_status + ".interfaces" + if update_dict.get(search_key): + interfaces_backup_update = { + path_vim_status + ".interfaces_backup": update_dict[search_key] + } + + self.db.set_one( + table, + q_filter={"_id": _id}, + update_dict=interfaces_backup_update, + ) + else: update_dict = {path_item + ".status": "DELETED"} self.db.set_one(