github.com/dcarley/cf-cli@v6.24.1-0.20170220111324-4225ff346898+incompatible/actor/v3action/task.go (about) 1 package v3action 2 3 import ( 4 "fmt" 5 "net/url" 6 "strconv" 7 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 9 ) 10 11 // Task represents a V3 actor Task. 12 type Task ccv3.Task 13 14 // TaskWorkersUnavailableError is returned when there are no workers to run a 15 // given task. 16 type TaskWorkersUnavailableError struct { 17 Message string 18 } 19 20 func (e TaskWorkersUnavailableError) Error() string { 21 return e.Message 22 } 23 24 // TaskNotFoundError is returned when no tasks matching the filters are found. 25 type TaskNotFoundError struct { 26 SequenceID int 27 } 28 29 func (e TaskNotFoundError) Error() string { 30 return fmt.Sprintf("Task sequence ID %d not found.", e.SequenceID) 31 } 32 33 // RunTask runs the provided command in the application environment associated 34 // with the provided application GUID. 35 func (actor Actor) RunTask(appGUID string, command string, name string, memory uint64, disk uint64) (Task, Warnings, error) { 36 task, warnings, err := actor.CloudControllerClient.NewTask(appGUID, command, name, memory, disk) 37 if err != nil { 38 if e, ok := err.(ccv3.TaskWorkersUnavailableError); ok { 39 return Task{}, Warnings(warnings), TaskWorkersUnavailableError{Message: e.Error()} 40 } 41 } 42 43 return Task(task), Warnings(warnings), err 44 } 45 46 // GetApplicationTasks returns a list of tasks associated with the provided 47 // appplication GUID. 48 func (actor Actor) GetApplicationTasks(appGUID string, sortOrder SortOrder) ([]Task, Warnings, error) { 49 query := url.Values{} 50 if sortOrder == Descending { 51 query.Add("order_by", "-created_at") 52 } 53 54 tasks, warnings, err := actor.CloudControllerClient.GetApplicationTasks(appGUID, query) 55 actorWarnings := Warnings(warnings) 56 if err != nil { 57 return nil, actorWarnings, err 58 } 59 60 allTasks := []Task{} 61 for _, task := range tasks { 62 allTasks = append(allTasks, Task(task)) 63 } 64 65 return allTasks, actorWarnings, nil 66 } 67 68 func (actor Actor) GetTaskBySequenceIDAndApplication(sequenceID int, appGUID string) (Task, Warnings, error) { 69 query := url.Values{ 70 "sequence_ids": []string{strconv.Itoa(sequenceID)}, 71 } 72 73 tasks, warnings, err := actor.CloudControllerClient.GetApplicationTasks(appGUID, query) 74 if err != nil { 75 return Task{}, Warnings(warnings), err 76 } 77 78 if len(tasks) == 0 { 79 return Task{}, Warnings(warnings), TaskNotFoundError{SequenceID: sequenceID} 80 } 81 82 return Task(tasks[0]), Warnings(warnings), nil 83 } 84 85 func (actor Actor) TerminateTask(taskGUID string) (Task, Warnings, error) { 86 task, warnings, err := actor.CloudControllerClient.UpdateTask(taskGUID) 87 return Task(task), Warnings(warnings), err 88 }