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