+ async def edit(self, vca_content, order_id):
+ op_id = vca_content.pop("op_id", None)
+ if not self.lcm_tasks.lock_HA("vca", "edit", op_id):
+ return
+
+ vca_id = vca_content["_id"]
+ self.logger.debug("Task vca_edit={} {}".format(vca_id, "Enter"))
+
+ db_vca = None
+ db_vca_update = {}
+
+ operation_state = "FAILED"
+ operation_details = ""
+ try:
+ self.logger.debug(
+ "Task vca_edit={} {}".format(vca_id, "Getting vca from db")
+ )
+ db_vca = self._get_vca_by_id(vca_id)
+ if self._is_vca_config_update(vca_content):
+ await self._validate_vca(db_vca["_id"])
+ self.logger.debug(
+ "Task vca_edit={} {}".format(
+ vca_id, "vca registered and validated successfully"
+ )
+ )
+ db_vca_update["_admin.operationalState"] = "ENABLED"
+ db_vca_update["_admin.detailed-status"] = "Connectivity: ok"
+
+ operation_details = "Edited"
+ operation_state = "COMPLETED"
+
+ self.logger.debug(
+ "Task vca_edit={} {}".format(
+ vca_id, "Done. Result: {}".format(operation_state)
+ )
+ )
+
+ except Exception as e:
+ error_msg = "Failed with exception: {}".format(e)
+ self.logger.error("Task vca_edit={} {}".format(vca_id, error_msg))
+ db_vca_update["_admin.operationalState"] = "ERROR"
+ db_vca_update["_admin.detailed-status"] = error_msg
+ operation_state = "FAILED"
+ operation_details = error_msg
+ finally:
+ try:
+ self.update_db_2("vca", vca_id, db_vca_update)
+
+ # Register the operation and unlock
+ self.lcm_tasks.unlock_HA(
+ "vca",
+ "edit",
+ op_id,
+ operationState=operation_state,
+ detailed_status=operation_details,
+ )
+ except DbException as e:
+ self.logger.error(
+ "Task vca_edit={} {}".format(
+ vca_id, "Cannot update database: {}".format(e)
+ )
+ )
+ self.lcm_tasks.remove("vca", vca_id, order_id)
+