func (s *Scheduler) runTask(taskProto *pb.Task, clusterOpID string) ([]*pb.TaskContainer, string, error) { if taskProto.State == pb.TaskState_DONE { // Task is already done (e.g. because we resume from a checkpoint). if taskProto.Error != "" { log.Errorf("Task: %v (%v/%v) failed before. Aborting the ClusterOperation. Error: %v Details: %v", taskProto.Name, clusterOpID, taskProto.Id, taskProto.Error, taskProto) return nil, "", errors.New(taskProto.Error) } log.Infof("Task: %v (%v/%v) skipped because it is already done. Full Details: %v", taskProto.Name, clusterOpID, taskProto.Id, taskProto) return nil, taskProto.Output, nil } task, err := s.createTaskInstance(taskProto.Name) if err != nil { log.Errorf("Task: %v (%v/%v) could not be instantiated. Error: %v Details: %v", taskProto.Name, clusterOpID, taskProto.Id, err, taskProto) return nil, "", err } taskProto.State = pb.TaskState_RUNNING log.Infof("Task: %v (%v/%v) running. Details: %v", taskProto.Name, clusterOpID, taskProto.Id, taskProto) newTaskContainers, output, err := task.Run(taskProto.Parameters) log.Infof("Task: %v (%v/%v) finished. newTaskContainers: %v, output: %v, error: %v", taskProto.Name, clusterOpID, taskProto.Id, newTaskContainers, output, err) return newTaskContainers, output, err }
// MarkTaskSucceeded marks the task as done. func MarkTaskSucceeded(t *automationpb.Task, output string) { t.State = automationpb.TaskState_DONE t.Output = output }
// MarkTaskFailed marks the task as failed. func MarkTaskFailed(t *automationpb.Task, output string, err error) { t.State = automationpb.TaskState_DONE t.Output = output t.Error = err.Error() }
// MarkTaskSucceeded marks the task as done. func MarkTaskSucceeded(t *pb.Task, output string) { t.State = pb.TaskState_DONE t.Output = output }