github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/cf/commands/application/restart_app_instance.go (about)

     1  package application
     2  
     3  import (
     4  	"strconv"
     5  
     6  	"github.com/cloudfoundry/cli/cf/api/app_instances"
     7  	"github.com/cloudfoundry/cli/cf/command_metadata"
     8  	"github.com/cloudfoundry/cli/cf/configuration/core_config"
     9  	. "github.com/cloudfoundry/cli/cf/i18n"
    10  	"github.com/cloudfoundry/cli/cf/requirements"
    11  	"github.com/cloudfoundry/cli/cf/terminal"
    12  	"github.com/codegangsta/cli"
    13  )
    14  
    15  type RestartAppInstance struct {
    16  	ui               terminal.UI
    17  	config           core_config.Reader
    18  	appReq           requirements.ApplicationRequirement
    19  	appInstancesRepo app_instances.AppInstancesRepository
    20  }
    21  
    22  func NewRestartAppInstance(ui terminal.UI, config core_config.Reader, appInstancesRepo app_instances.AppInstancesRepository) (cmd *RestartAppInstance) {
    23  	cmd = new(RestartAppInstance)
    24  	cmd.ui = ui
    25  	cmd.config = config
    26  	cmd.appInstancesRepo = appInstancesRepo
    27  	return
    28  }
    29  
    30  func (cmd *RestartAppInstance) Metadata() command_metadata.CommandMetadata {
    31  	return command_metadata.CommandMetadata{
    32  		Name:        "restart-app-instance",
    33  		Description: T("Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index"),
    34  		Usage:       T("CF_NAME restart-app-instance APP_NAME INDEX"),
    35  	}
    36  }
    37  
    38  func (cmd *RestartAppInstance) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) {
    39  	if len(c.Args()) != 2 {
    40  		cmd.ui.FailWithUsage(c)
    41  	}
    42  
    43  	cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0])
    44  
    45  	reqs = []requirements.Requirement{
    46  		requirementsFactory.NewLoginRequirement(),
    47  		requirementsFactory.NewTargetedSpaceRequirement(),
    48  		cmd.appReq,
    49  	}
    50  
    51  	return
    52  }
    53  
    54  func (cmd *RestartAppInstance) Run(c *cli.Context) {
    55  	app := cmd.appReq.GetApplication()
    56  
    57  	instance, err := strconv.Atoi(c.Args()[1])
    58  
    59  	if err != nil {
    60  		cmd.ui.Failed(T("Instance must be a non-negative integer"))
    61  	}
    62  
    63  	cmd.ui.Say(T("Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}",
    64  		map[string]interface{}{
    65  			"Instance": instance,
    66  			"AppName":  terminal.EntityNameColor(app.Name),
    67  			"Username": terminal.EntityNameColor(cmd.config.Username()),
    68  		}))
    69  
    70  	err = cmd.appInstancesRepo.DeleteInstance(app.Guid, instance)
    71  	if err != nil {
    72  		cmd.ui.Failed(err.Error())
    73  	}
    74  
    75  	cmd.ui.Ok()
    76  	cmd.ui.Say("")
    77  
    78  }