github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v6/run_task_command.go (about) 1 package v6 2 3 import ( 4 "fmt" 5 6 "code.cloudfoundry.org/cli/actor/sharedaction" 7 "code.cloudfoundry.org/cli/actor/v3action" 8 "code.cloudfoundry.org/cli/command" 9 "code.cloudfoundry.org/cli/command/flag" 10 "code.cloudfoundry.org/cli/command/v6/shared" 11 ) 12 13 //go:generate counterfeiter . RunTaskActor 14 15 type RunTaskActor interface { 16 GetApplicationByNameAndSpace(appName string, spaceGUID string) (v3action.Application, v3action.Warnings, error) 17 RunTask(appGUID string, task v3action.Task) (v3action.Task, v3action.Warnings, error) 18 } 19 20 type RunTaskCommand struct { 21 RequiredArgs flag.RunTaskArgs `positional-args:"yes"` 22 Disk flag.Megabytes `short:"k" description:"Disk limit (e.g. 256M, 1024M, 1G)"` 23 Memory flag.Megabytes `short:"m" description:"Memory limit (e.g. 256M, 1024M, 1G)"` 24 Name string `long:"name" description:"Name to give the task (generated if omitted)"` 25 usage interface{} `usage:"CF_NAME run-task APP_NAME COMMAND [-k DISK] [-m MEMORY] [--name TASK_NAME]\n\nTIP:\n Use 'cf logs' to display the logs of the app and all its tasks. If your task name is unique, grep this command's output for the task name to view task-specific logs.\n\nEXAMPLES:\n CF_NAME run-task my-app \"bundle exec rake db:migrate\" --name migrate"` 26 relatedCommands interface{} `related_commands:"logs, tasks, terminate-task"` 27 28 UI command.UI 29 Config command.Config 30 SharedActor command.SharedActor 31 Actor RunTaskActor 32 } 33 34 func (cmd *RunTaskCommand) Setup(config command.Config, ui command.UI) error { 35 cmd.UI = ui 36 cmd.Config = config 37 cmd.SharedActor = sharedaction.NewActor(config) 38 39 client, _, err := shared.NewV3BasedClients(config, ui, true) 40 if err != nil { 41 return err 42 } 43 cmd.Actor = v3action.NewActor(client, config, nil, nil) 44 45 return nil 46 } 47 48 func (cmd RunTaskCommand) Execute(args []string) error { 49 err := cmd.SharedActor.CheckTarget(true, true) 50 if err != nil { 51 return err 52 } 53 54 space := cmd.Config.TargetedSpace() 55 56 user, err := cmd.Config.CurrentUser() 57 if err != nil { 58 return err 59 } 60 61 application, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.AppName, space.GUID) 62 cmd.UI.DisplayWarnings(warnings) 63 if err != nil { 64 return err 65 } 66 67 cmd.UI.DisplayTextWithFlavor("Creating task for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", map[string]interface{}{ 68 "AppName": cmd.RequiredArgs.AppName, 69 "OrgName": cmd.Config.TargetedOrganization().Name, 70 "SpaceName": space.Name, 71 "CurrentUser": user.Name, 72 }) 73 74 inputTask := v3action.Task{ 75 Command: cmd.RequiredArgs.Command, 76 } 77 78 if cmd.Name != "" { 79 inputTask.Name = cmd.Name 80 } 81 if cmd.Disk.IsSet { 82 inputTask.DiskInMB = cmd.Disk.Value 83 } 84 if cmd.Memory.IsSet { 85 inputTask.MemoryInMB = cmd.Memory.Value 86 } 87 88 task, warnings, err := cmd.Actor.RunTask(application.GUID, inputTask) 89 cmd.UI.DisplayWarnings(warnings) 90 if err != nil { 91 return err 92 } 93 94 cmd.UI.DisplayOK() 95 cmd.UI.DisplayText("Task has been submitted successfully for execution.") 96 cmd.UI.DisplayKeyValueTable("", [][]string{ 97 {cmd.UI.TranslateText("task name:"), task.Name}, 98 {cmd.UI.TranslateText("task id:"), fmt.Sprint(task.SequenceID)}, 99 }, 3) 100 101 return nil 102 }