- for vim_id, vim_info in vim_dict.items():
- # look for task
- task_need_update = False
- task = vm_to_refresh_dict[vim_id]
- self.logger.debug("get-vm vm_id=%s result=%s", task["vim_id"], str(vim_info))
-
- # update database
- task_vim_info = task.get("vim_info")
- task_error_msg = task.get("error_msg")
- task_vim_status = task["extra"].get("vim_status")
- if vim_info.get("error_msg"):
- vim_info["error_msg"] = self._format_vim_error_msg(vim_info["error_msg"])
- if task_vim_status != vim_info["status"] or task_error_msg != vim_info.get("error_msg") or \
- task_vim_info != vim_info.get("vim_info"):
- with self.db_lock:
- temp_dict = {"status": vim_info["status"],
- "error_msg": vim_info.get("error_msg"),
- "vim_info": vim_info.get("vim_info")}
- self.db.update_rows('instance_vms', UPDATE=temp_dict, WHERE={"uuid": task["item_id"]})
- task["extra"]["vim_status"] = vim_info["status"]
- task["error_msg"] = vim_info.get("error_msg")
- task["vim_info"] = vim_info.get("vim_info")
- task_need_update = True
- for interface in vim_info.get("interfaces", ()):
- vim_interface_id = interface["vim_interface_id"]
- if vim_interface_id not in task["extra"]["interfaces"]:
- self.logger.critical("Interface not found {} on task info {}".format(
- vim_interface_id, task["extra"]["interfaces"]), exc_info=True)
- continue
- task_interface = task["extra"]["interfaces"][vim_interface_id]
- task_vim_interface = task["vim_interfaces"].get(vim_interface_id)
- if task_vim_interface != interface:
- # delete old port
- if task_interface.get("sdn_port_id"):
- try:
- with self.db_lock:
- self.ovim.delete_port(task_interface["sdn_port_id"])
- task_interface["sdn_port_id"] = None
- task_need_update = True
- except ovimException as e:
- self.logger.error("ovimException deleting external_port={} ".format(
- task_interface["sdn_port_id"]) + str(e), exc_info=True)
- # TODO Set error_msg at instance_nets
-
- # Create SDN port
- sdn_net_id = task_interface.get("sdn_net_id")
- if sdn_net_id and interface.get("compute_node") and interface.get("pci"):
- sdn_port_name = sdn_net_id + "." + task["vim_id"]
- sdn_port_name = sdn_port_name[:63]
- try:
- with self.db_lock:
- sdn_port_id = self.ovim.new_external_port(
- {"compute_node": interface["compute_node"],
- "pci": interface["pci"],
- "vlan": interface.get("vlan"),
- "net_id": sdn_net_id,
- "region": self.vim["config"]["datacenter_id"],
- "name": sdn_port_name,
- "mac": interface.get("mac_address")})
- task_interface["sdn_port_id"] = sdn_port_id
- task_need_update = True
- except (ovimException, Exception) as e:
- self.logger.error(
- "ovimException creating new_external_port compute_node={} "
- "pci={} vlan={} ".format(
- interface["compute_node"],
- interface["pci"],
- interface.get("vlan")) + str(e),
- exc_info=True)
- # TODO Set error_msg at instance_nets
- with self.db_lock:
- self.db.update_rows(
- 'instance_interfaces',
- UPDATE={"mac_address": interface.get("mac_address"),
- "ip_address": interface.get("ip_address"),
- "vim_info": interface.get("vim_info"),
- "sdn_port_id": task_interface.get("sdn_port_id"),
- "compute_node": interface.get("compute_node"),
- "pci": interface.get("pci"),
- "vlan": interface.get("vlan"),
- },
- WHERE={'uuid': task_interface["iface_id"]})
- task["vim_interfaces"][vim_interface_id] = interface
- if task_need_update:
+ except vimconn.vimconnException as e:
+ # Mark all tasks at VIM_ERROR status
+ self.logger.error("task=several get-VM: vimconnException when trying to refresh vms " + str(e))
+ vim_dict = {}
+ for vim_id in vm_to_refresh_list:
+ vim_dict[vim_id] = {"status": "VIM_ERROR", "error_msg": str(e)}
+
+ for vim_id, vim_info in vim_dict.items():
+ # look for task
+ task_need_update = False
+ task = vm_to_refresh_dict[vim_id]
+ task_id = task["instance_action_id"] + "." + str(task["task_index"])
+ self.logger.debug("task={} get-VM: vim_vm_id={} result={}".format(task_id, task["vim_id"], vim_info))
+
+ # check and update interfaces
+ task_warning_msg = ""
+ for interface in vim_info.get("interfaces", ()):
+ vim_interface_id = interface["vim_interface_id"]
+ if vim_interface_id not in task["extra"]["interfaces"]:
+ self.logger.critical("task={} get-VM: Interface not found {} on task info {}".format(
+ task_id, vim_interface_id, task["extra"]["interfaces"]), exc_info=True)
+ continue
+ task_interface = task["extra"]["interfaces"][vim_interface_id]
+ task_vim_interface = task["vim_interfaces"].get(vim_interface_id)
+ if task_vim_interface != interface:
+ # delete old port
+ if task_interface.get("sdn_port_id"):
+ try:
+ with self.db_lock:
+ self.ovim.delete_port(task_interface["sdn_port_id"])
+ task_interface["sdn_port_id"] = None
+ task_need_update = True
+ except ovimException as e:
+ error_text = "ovimException deleting external_port={}: {}".format(
+ task_interface["sdn_port_id"], e)
+ self.logger.error("task={} get-VM: {}".format(task_id, error_text), exc_info=True)
+ task_warning_msg += error_text
+ # TODO Set error_msg at instance_nets instead of instance VMs
+
+ # Create SDN port
+ sdn_net_id = task_interface.get("sdn_net_id")
+ if sdn_net_id and interface.get("compute_node") and interface.get("pci"):
+ sdn_port_name = sdn_net_id + "." + task["vim_id"]
+ sdn_port_name = sdn_port_name[:63]
+ try:
+ with self.db_lock:
+ sdn_port_id = self.ovim.new_external_port(
+ {"compute_node": interface["compute_node"],
+ "pci": interface["pci"],
+ "vlan": interface.get("vlan"),
+ "net_id": sdn_net_id,
+ "region": self.vim["config"]["datacenter_id"],
+ "name": sdn_port_name,
+ "mac": interface.get("mac_address")})
+ task_interface["sdn_port_id"] = sdn_port_id
+ task_need_update = True
+ except (ovimException, Exception) as e:
+ error_text = "ovimException creating new_external_port compute_node={}"\
+ " pci={} vlan={} {}".format(
+ interface["compute_node"],
+ interface["pci"],
+ interface.get("vlan"), e)
+ self.logger.error("task={} get-VM: {}".format(task_id, error_text), exc_info=True)
+ task_warning_msg += error_text
+ # TODO Set error_msg at instance_nets instead of instance VMs
+