github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+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  }