code.cloudfoundry.org/cli@v7.1.0+incompatible/actor/v3action/task.go (about) 1 package v3action 2 3 import ( 4 "strconv" 5 6 "sort" 7 8 "code.cloudfoundry.org/cli/actor/actionerror" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 10 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 11 ) 12 13 // Task represents a V3 actor Task. 14 type Task ccv3.Task 15 16 // RunTask runs the provided command in the application environment associated 17 // with the provided application GUID. 18 func (actor Actor) RunTask(appGUID string, task Task) (Task, Warnings, error) { 19 createdTask, warnings, err := actor.CloudControllerClient.CreateApplicationTask(appGUID, ccv3.Task(task)) 20 if err != nil { 21 if e, ok := err.(ccerror.TaskWorkersUnavailableError); ok { 22 return Task{}, Warnings(warnings), actionerror.TaskWorkersUnavailableError{Message: e.Error()} 23 } 24 } 25 26 return Task(createdTask), Warnings(warnings), err 27 } 28 29 // GetApplicationTasks returns a list of tasks associated with the provided 30 // appplication GUID. 31 func (actor Actor) GetApplicationTasks(appGUID string, sortOrder SortOrder) ([]Task, Warnings, error) { 32 tasks, warnings, err := actor.CloudControllerClient.GetApplicationTasks(appGUID) 33 actorWarnings := Warnings(warnings) 34 if err != nil { 35 return nil, actorWarnings, err 36 } 37 38 allTasks := []Task{} 39 for _, task := range tasks { 40 allTasks = append(allTasks, Task(task)) 41 } 42 43 if sortOrder == Descending { 44 sort.Slice(allTasks, func(i int, j int) bool { return allTasks[i].SequenceID > allTasks[j].SequenceID }) 45 } else { 46 sort.Slice(allTasks, func(i int, j int) bool { return allTasks[i].SequenceID < allTasks[j].SequenceID }) 47 } 48 49 return allTasks, actorWarnings, nil 50 } 51 52 func (actor Actor) GetTaskBySequenceIDAndApplication(sequenceID int, appGUID string) (Task, Warnings, error) { 53 tasks, warnings, err := actor.CloudControllerClient.GetApplicationTasks( 54 appGUID, 55 ccv3.Query{Key: ccv3.SequenceIDFilter, Values: []string{strconv.Itoa(sequenceID)}}, 56 ) 57 if err != nil { 58 return Task{}, Warnings(warnings), err 59 } 60 61 if len(tasks) == 0 { 62 return Task{}, Warnings(warnings), actionerror.TaskNotFoundError{SequenceID: sequenceID} 63 } 64 65 return Task(tasks[0]), Warnings(warnings), nil 66 } 67 68 func (actor Actor) TerminateTask(taskGUID string) (Task, Warnings, error) { 69 task, warnings, err := actor.CloudControllerClient.UpdateTaskCancel(taskGUID) 70 return Task(task), Warnings(warnings), err 71 }