X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_ro%2Fvim_thread.py;h=38a73d12e1cc68253595caf44fbff76d4ddfd1f6;hb=refs%2Fheads%2Ffeature7148;hp=8ed570cd6a82b4e137430cf7ff8a8e417f408b96;hpb=8a2d20725d5b3ad32946affd7bea7388434094e9;p=osm%2FRO.git diff --git a/osm_ro/vim_thread.py b/osm_ro/vim_thread.py index 8ed570cd..38a73d12 100644 --- a/osm_ro/vim_thread.py +++ b/osm_ro/vim_thread.py @@ -63,7 +63,7 @@ The task content is (M: stored at memory, D: stored at database): vim_status: VIM status of the element. Stored also at database in the instance_XXX vim_info: Detailed information of a vm/net from the VIM. Stored at database in the instance_XXX but not at vim_wim_actions - M depends: dict with task_index(from depends_on) to vim_id + M depends: dict with task_index(from depends_on) to dependency task M params: same as extra[params] MD error_msg: descriptive text upon an error.Stored also at database instance_XXX MD created_at: task creation time. The task of creation must be the oldest @@ -86,6 +86,8 @@ import vimconn_aws import vimconn_opennebula import vimconn_openstack import vimconn_vmware +import vimconn_fos +import vimconn_azure import yaml from db_base import db_base_Exception from lib_osm_openvim.ovim import ovimException @@ -100,6 +102,8 @@ vim_module = { "opennebula": vimconn_opennebula, "openstack": vimconn_openstack, "vmware": vimconn_vmware, + "fos": vimconn_fos, + "azure": vimconn_azure, } @@ -254,6 +258,7 @@ class vim_thread(threading.Thread): # task of creation must be the first in the list of related_task assert(related_tasks[0]["action"] in ("CREATE", "FIND")) + task["params"] = None if task["extra"]: extra = yaml.load(task["extra"]) else: @@ -532,9 +537,8 @@ class vim_thread(threading.Thread): task_dependency["instance_action_id"], task_dependency["task_index"], task_dependency["action"], task_dependency["item"], task_dependency.get("error_msg"))) - task["depends"]["TASK-"+str(task_index)] = task_dependency["vim_id"] - task["depends"]["TASK-{}.{}".format(task["instance_action_id"], task_index)] =\ - task_dependency["vim_id"] + task["depends"]["TASK-"+str(task_index)] = task_dependency + task["depends"]["TASK-{}.{}".format(task["instance_action_id"], task_index)] = task_dependency if dependency_not_completed: # Move this task to the time dependency is going to be modified plus 10 seconds. self.db.update_rows("vim_wim_actions", modified_time=dependency_modified_at + 10, @@ -572,7 +576,7 @@ class vim_thread(threading.Thread): task["error_msg"] = related_tasks[0]["error_msg"] task["vim_id"] = related_tasks[0]["vim_id"] extra = yaml.load(related_tasks[0]["extra"]) - task["extra"]["vim_status"] = extra["vim_status"] + task["extra"]["vim_status"] = extra.get("vim_status") next_refresh = related_tasks[0]["modified_at"] + 0.001 database_update = {"status": task["extra"].get("vim_status", "VIM_ERROR"), "error_msg": task["error_msg"]} @@ -704,9 +708,12 @@ class vim_thread(threading.Thread): UPDATE={("number_failed" if task["status"] == "FAILED" else "number_done"): {"INCREMENT": 1}}, WHERE={"uuid": task["instance_action_id"]}) if database_update: + where_filter = {"related": task["related"]} + if task["item"] == "instance_nets" and task["datacenter_vim_id"]: + where_filter["datacenter_tenant_id"] = task["datacenter_vim_id"] self.db.update_rows(table=task["item"], UPDATE=database_update, - WHERE={"related": task["related"]}) + WHERE=where_filter) except db_base_Exception as e: self.logger.error("task={} Error updating database {}".format(task_id, e), exc_info=True) @@ -808,7 +815,7 @@ class vim_thread(threading.Thread): net_list = params[5] for net in net_list: if "net_id" in net and is_task_id(net["net_id"]): # change task_id into network_id - network_id = task["depends"][net["net_id"]] + network_id = task["depends"][net["net_id"]].get("vim_id") if not network_id: raise VimThreadException( "Cannot create VM because depends on a network not created or found: " + @@ -976,8 +983,7 @@ class vim_thread(threading.Thread): if wim_account_name and self.vim.config["wim_external_ports"]: # add external port to connect WIM. Try with compute node __WIM:wim_name and __WIM action_text = "attaching external port to ovim network" - sdn_port_name = sdn_net_id + "." + task["vim_id"] - sdn_port_name = sdn_port_name[:63] + sdn_port_name = "external_port" sdn_port_data = { "compute_node": "__WIM:" + wim_account_name[0:58], "pci": None, @@ -1020,6 +1026,8 @@ class vim_thread(threading.Thread): net_vim_id = task["vim_id"] sdn_net_id = task["extra"].get("sdn_net_id") try: + if net_vim_id: + self.vim.delete_network(net_vim_id, task["extra"].get("created_items")) if sdn_net_id: # Delete any attached port to this sdn network. There can be ports associated to this network in case # it was manually done using 'openmano vim-net-sdn-attach' @@ -1029,8 +1037,6 @@ class vim_thread(threading.Thread): for port in port_list: self.ovim.delete_port(port['uuid'], idempotent=True) self.ovim.delete_network(sdn_net_id, idempotent=True) - if net_vim_id: - self.vim.delete_network(net_vim_id, task["extra"].get("created_items")) task["status"] = "FINISHED" # with FINISHED instead of DONE it will not be refreshing task["error_msg"] = None return None @@ -1055,7 +1061,8 @@ class vim_thread(threading.Thread): dep_id = "TASK-" + str(task["extra"]["depends_on"][0]) task_id = task["instance_action_id"] + "." + str(task["task_index"]) error_text = "" - interfaces = task.get("depends").get(dep_id).get("extra").get("interfaces") + interfaces = task["depends"][dep_id]["extra"].get("interfaces") + ingress_interface_id = task.get("extra").get("params").get("ingress_interface_id") egress_interface_id = task.get("extra").get("params").get("egress_interface_id") ingress_vim_interface_id = None