github.com/loafoe/cli@v7.1.0+incompatible/command/v7/rollback_command.go (about) 1 package v7 2 3 import ( 4 "fmt" 5 6 "code.cloudfoundry.org/cli/cf/errors" 7 "code.cloudfoundry.org/cli/command" 8 "code.cloudfoundry.org/cli/command/flag" 9 ) 10 11 type RollbackCommand struct { 12 BaseCommand 13 14 Force bool `short:"f" description:"Force rollback without confirmation"` 15 RequiredArgs flag.AppName `positional-args:"yes"` 16 Version flag.PositiveInteger `long:"revision" required:"true" description:"Roll back to the given app revision"` 17 relatedCommands interface{} `related_commands:"revisions"` 18 usage interface{} `usage:"CF_NAME rollback APP_NAME [--revision REVISION_NUMBER] [-f]"` 19 } 20 21 func (cmd RollbackCommand) Execute(args []string) error { 22 cmd.UI.DisplayWarning(command.ExperimentalWarning) 23 cmd.UI.DisplayNewline() 24 25 targetRevision := int(cmd.Version.Value) 26 err := cmd.SharedActor.CheckTarget(true, true) 27 if err != nil { 28 return err 29 } 30 31 user, err := cmd.Config.CurrentUser() 32 if err != nil { 33 return err 34 } 35 36 app, warnings, _ := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID) 37 cmd.UI.DisplayWarnings(warnings) 38 39 revisions, warnings, _ := cmd.Actor.GetRevisionsByApplicationNameAndSpace(app.Name, cmd.Config.TargetedSpace().GUID) 40 41 cmd.UI.DisplayWarnings(warnings) 42 if len(revisions) == 0 { 43 return errors.New(fmt.Sprintf("No revisions for app %s", cmd.RequiredArgs.AppName)) 44 } 45 newRevision := revisions[0].Version + 1 46 revision, warnings, _ := cmd.Actor.GetRevisionByApplicationAndVersion(app.GUID, targetRevision) 47 cmd.UI.DisplayWarnings(warnings) 48 49 // TODO Localization? 50 51 if !cmd.Force { 52 cmd.UI.DisplayTextWithFlavor("Rolling '{{.AppName}}' back to revision '{{.TargetRevision}}' will create a new revision. The new revision '{{.NewRevision}}' will use the settings from revision '{{.TargetRevision}}'.", map[string]interface{}{ 53 "AppName": cmd.RequiredArgs.AppName, 54 "TargetRevision": targetRevision, 55 "NewRevision": newRevision, 56 }) 57 58 prompt := "Are you sure you want to continue?" 59 response, promptErr := cmd.UI.DisplayBoolPrompt(false, prompt, nil) 60 61 if promptErr != nil { 62 return promptErr 63 } 64 65 if !response { 66 cmd.UI.DisplayText("App '{{.AppName}}' has not been rolled back to revision '{{.TargetRevision}}'.", map[string]interface{}{ 67 "AppName": cmd.RequiredArgs.AppName, 68 "TargetRevision": targetRevision, 69 }) 70 return nil 71 } 72 } 73 cmd.UI.DisplayTextWithFlavor("Rolling back to revision {{.TargetRevision}} for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{ 74 "AppName": cmd.RequiredArgs.AppName, 75 "TargetRevision": targetRevision, 76 "OrgName": cmd.Config.TargetedOrganization().Name, 77 "SpaceName": cmd.Config.TargetedSpace().Name, 78 "Username": user.Name, 79 }) 80 cmd.UI.DisplayNewline() 81 82 _, warnings, _ = cmd.Actor.CreateDeploymentByApplicationAndRevision(app.GUID, revision.GUID) 83 cmd.UI.DisplayWarnings(warnings) 84 85 cmd.UI.DisplayOK() 86 return nil 87 }