github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+incompatible/command/v3/terminate_task_command.go (about) 1 package v3 2 3 import ( 4 "net/http" 5 6 "code.cloudfoundry.org/cli/actor/sharedaction" 7 "code.cloudfoundry.org/cli/actor/v3action" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccversion" 10 "code.cloudfoundry.org/cli/command" 11 "code.cloudfoundry.org/cli/command/flag" 12 "code.cloudfoundry.org/cli/command/translatableerror" 13 "code.cloudfoundry.org/cli/command/v3/shared" 14 ) 15 16 //go:generate counterfeiter . TerminateTaskActor 17 18 type TerminateTaskActor interface { 19 GetApplicationByNameAndSpace(appName string, spaceGUID string) (v3action.Application, v3action.Warnings, error) 20 GetTaskBySequenceIDAndApplication(sequenceID int, appGUID string) (v3action.Task, v3action.Warnings, error) 21 TerminateTask(taskGUID string) (v3action.Task, v3action.Warnings, error) 22 CloudControllerAPIVersion() string 23 } 24 25 type TerminateTaskCommand struct { 26 RequiredArgs flag.TerminateTaskArgs `positional-args:"yes"` 27 usage interface{} `usage:"CF_NAME terminate-task APP_NAME TASK_ID\n\nEXAMPLES:\n CF_NAME terminate-task my-app 3"` 28 relatedCommands interface{} `related_commands:"tasks"` 29 30 UI command.UI 31 Config command.Config 32 SharedActor command.SharedActor 33 Actor TerminateTaskActor 34 } 35 36 func (cmd *TerminateTaskCommand) Setup(config command.Config, ui command.UI) error { 37 cmd.UI = ui 38 cmd.Config = config 39 cmd.SharedActor = sharedaction.NewActor(config) 40 41 client, _, err := shared.NewClients(config, ui, true) 42 if err != nil { 43 if v3Err, ok := err.(ccerror.V3UnexpectedResponseError); ok && v3Err.ResponseCode == http.StatusNotFound { 44 return translatableerror.MinimumAPIVersionNotMetError{MinimumVersion: ccversion.MinVersionRunTaskV3} 45 } 46 47 return err 48 } 49 cmd.Actor = v3action.NewActor(nil, client, config) 50 51 return nil 52 } 53 54 func (cmd TerminateTaskCommand) Execute(args []string) error { 55 sequenceId, err := flag.ParseStringToInt(cmd.RequiredArgs.SequenceID) 56 if err != nil { 57 return translatableerror.ParseArgumentError{ 58 ArgumentName: "TASK_ID", 59 ExpectedType: "integer", 60 } 61 } 62 63 err = command.MinimumAPIVersionCheck(cmd.Actor.CloudControllerAPIVersion(), ccversion.MinVersionRunTaskV3) 64 if err != nil { 65 return err 66 } 67 68 err = cmd.SharedActor.CheckTarget(cmd.Config, true, true) 69 if err != nil { 70 return shared.HandleError(err) 71 } 72 73 space := cmd.Config.TargetedSpace() 74 75 user, err := cmd.Config.CurrentUser() 76 if err != nil { 77 return err 78 } 79 80 application, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.AppName, space.GUID) 81 cmd.UI.DisplayWarnings(warnings) 82 if err != nil { 83 return shared.HandleError(err) 84 } 85 86 task, warnings, err := cmd.Actor.GetTaskBySequenceIDAndApplication(sequenceId, application.GUID) 87 cmd.UI.DisplayWarnings(warnings) 88 if err != nil { 89 return shared.HandleError(err) 90 } 91 92 cmd.UI.DisplayTextWithFlavor("Terminating task {{.TaskSequenceID}} of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", 93 map[string]interface{}{ 94 "TaskSequenceID": cmd.RequiredArgs.SequenceID, 95 "AppName": cmd.RequiredArgs.AppName, 96 "OrgName": cmd.Config.TargetedOrganization().Name, 97 "SpaceName": space.Name, 98 "CurrentUser": user.Name, 99 }) 100 101 _, warnings, err = cmd.Actor.TerminateTask(task.GUID) 102 cmd.UI.DisplayWarnings(warnings) 103 if err != nil { 104 return shared.HandleError(err) 105 } 106 107 cmd.UI.DisplayOK() 108 109 return nil 110 }