github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/restart_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"github.com/LukasHeimann/cloudfoundrycli/v8/actor/v7action"
     5  	"github.com/LukasHeimann/cloudfoundrycli/v8/api/cloudcontroller/ccv3/constant"
     6  	"github.com/LukasHeimann/cloudfoundrycli/v8/api/logcache"
     7  	"github.com/LukasHeimann/cloudfoundrycli/v8/command"
     8  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/flag"
     9  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/v7/shared"
    10  )
    11  
    12  type RestartCommand struct {
    13  	BaseCommand
    14  
    15  	RequiredArgs        flag.AppName            `positional-args:"yes"`
    16  	Strategy            flag.DeploymentStrategy `long:"strategy" description:"Deployment strategy, either rolling or null."`
    17  	NoWait              bool                    `long:"no-wait" description:"Exit when the first instance of the web process is healthy"`
    18  	usage               interface{}             `usage:"CF_NAME restart APP_NAME\n\n   This command will cause downtime unless you use '--strategy rolling'.\n\n   If the app's most recent package is unstaged, restarting the app will stage and run that package.\n   Otherwise, the app's current droplet will be run."`
    19  	relatedCommands     interface{}             `related_commands:"restage, restart-app-instance"`
    20  	envCFStagingTimeout interface{}             `environmentName:"CF_STAGING_TIMEOUT" environmentDescription:"Max wait time for staging, in minutes" environmentDefault:"15"`
    21  	envCFStartupTimeout interface{}             `environmentName:"CF_STARTUP_TIMEOUT" environmentDescription:"Max wait time for app instance startup, in minutes" environmentDefault:"5"`
    22  
    23  	Stager shared.AppStager
    24  }
    25  
    26  func (cmd *RestartCommand) Setup(config command.Config, ui command.UI) error {
    27  	err := cmd.BaseCommand.Setup(config, ui)
    28  	if err != nil {
    29  		return err
    30  	}
    31  
    32  	logCacheClient, err := logcache.NewClient(config.LogCacheEndpoint(), config, ui, v7action.NewDefaultKubernetesConfigGetter())
    33  	if err != nil {
    34  		return err
    35  	}
    36  
    37  	cmd.Stager = shared.NewAppStager(cmd.Actor, cmd.UI, cmd.Config, logCacheClient)
    38  
    39  	return nil
    40  }
    41  
    42  func (cmd RestartCommand) Execute(args []string) error {
    43  	err := cmd.SharedActor.CheckTarget(true, true)
    44  	if err != nil {
    45  		return err
    46  	}
    47  
    48  	user, err := cmd.Actor.GetCurrentUser()
    49  	if err != nil {
    50  		return err
    51  	}
    52  
    53  	app, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID)
    54  	cmd.UI.DisplayWarnings(warnings)
    55  	if err != nil {
    56  		return err
    57  	}
    58  
    59  	packageGUID, warnings, err := cmd.Actor.GetUnstagedNewestPackageGUID(app.GUID)
    60  	cmd.UI.DisplayWarnings(warnings)
    61  	if err != nil {
    62  		return err
    63  	}
    64  
    65  	if packageGUID != "" || cmd.Strategy.Name == constant.DeploymentStrategyRolling {
    66  		cmd.UI.DisplayTextWithFlavor("Restarting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{
    67  			"AppName":   cmd.RequiredArgs.AppName,
    68  			"OrgName":   cmd.Config.TargetedOrganization().Name,
    69  			"SpaceName": cmd.Config.TargetedSpace().Name,
    70  			"Username":  user.Name,
    71  		})
    72  		cmd.UI.DisplayNewline()
    73  	}
    74  
    75  	if packageGUID != "" {
    76  		err = cmd.Stager.StageAndStart(app, cmd.Config.TargetedSpace(), cmd.Config.TargetedOrganization(), packageGUID, cmd.Strategy.Name, cmd.NoWait, constant.ApplicationRestarting)
    77  		if err != nil {
    78  			return err
    79  		}
    80  	} else {
    81  		err = cmd.Stager.StartApp(app, "", cmd.Strategy.Name, cmd.NoWait, cmd.Config.TargetedSpace(), cmd.Config.TargetedOrganization(), constant.ApplicationRestarting)
    82  		if err != nil {
    83  			return err
    84  		}
    85  	}
    86  
    87  	return nil
    88  }