inject_user_key routine fixes
[osm/RO.git] / osm_ro / vim_thread.py
index 8ed570c..38a73d1 100644 (file)
@@ -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