github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/upgrade_service_command.go (about) 1 package v7 2 3 import ( 4 "github.com/LukasHeimann/cloudfoundrycli/v8/actor/actionerror" 5 "github.com/LukasHeimann/cloudfoundrycli/v8/command/flag" 6 "github.com/LukasHeimann/cloudfoundrycli/v8/command/translatableerror" 7 ) 8 9 type UpgradeServiceCommand struct { 10 BaseCommand 11 12 RequiredArgs flag.ServiceInstance `positional-args:"yes"` 13 Force bool `short:"f" long:"force" description:"Force upgrade without asking for confirmation"` 14 15 relatedCommands interface{} `related_commands:"services, update-service, update-user-provided-service"` 16 } 17 18 func (cmd UpgradeServiceCommand) Execute(args []string) error { 19 if err := cmd.SharedActor.CheckTarget(true, true); err != nil { 20 return err 21 } 22 23 if !cmd.Force { 24 upgrade, err := cmd.displayPrompt() 25 if err != nil { 26 return err 27 } 28 29 if !upgrade { 30 cmd.UI.DisplayText("Upgrade cancelled") 31 return nil 32 } 33 } 34 35 if err := cmd.displayEvent(); err != nil { 36 return err 37 } 38 39 serviceInstanceName := string(cmd.RequiredArgs.ServiceInstance) 40 41 warnings, actorError := cmd.Actor.UpgradeManagedServiceInstance( 42 serviceInstanceName, 43 cmd.Config.TargetedSpace().GUID, 44 ) 45 cmd.UI.DisplayWarnings(warnings) 46 47 switch actorError.(type) { 48 case nil: 49 cmd.displayUpgradeInProgressMessage() 50 cmd.UI.DisplayOK() 51 case actionerror.ServiceInstanceUpgradeNotAvailableError: 52 cmd.UI.DisplayText(actorError.Error()) 53 cmd.UI.DisplayOK() 54 case actionerror.ServiceInstanceNotFoundError: 55 return translatableerror.ServiceInstanceNotFoundError{Name: serviceInstanceName} 56 default: 57 return actorError 58 } 59 60 return nil 61 } 62 63 func (cmd UpgradeServiceCommand) Usage() string { 64 return "CF_NAME upgrade-service SERVICE_INSTANCE" 65 } 66 67 func (cmd UpgradeServiceCommand) displayEvent() error { 68 user, err := cmd.Actor.GetCurrentUser() 69 if err != nil { 70 return err 71 } 72 73 cmd.UI.DisplayTextWithFlavor( 74 "Upgrading service instance {{.ServiceInstanceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", 75 map[string]interface{}{ 76 "ServiceInstanceName": cmd.RequiredArgs.ServiceInstance, 77 "OrgName": cmd.Config.TargetedOrganization().Name, 78 "SpaceName": cmd.Config.TargetedSpace().Name, 79 "Username": user.Name, 80 }, 81 ) 82 83 return nil 84 } 85 86 func (cmd UpgradeServiceCommand) displayPrompt() (bool, error) { 87 cmd.UI.DisplayText( 88 "Warning: This operation may be long running and will block further operations " + 89 "on the service instance until it's completed", 90 ) 91 92 upgrade, err := cmd.UI.DisplayBoolPrompt( 93 false, 94 "Do you really want to upgrade the service instance {{.ServiceInstanceName}}?", 95 cmd.serviceInstanceName(), 96 ) 97 if err != nil { 98 return false, err 99 } 100 101 return upgrade, nil 102 } 103 104 func (cmd UpgradeServiceCommand) displayUpgradeInProgressMessage() { 105 cmd.UI.DisplayTextWithFlavor("Upgrade in progress. Use 'cf services' or 'cf service {{.ServiceInstance}}' to check operation status.", 106 map[string]interface{}{ 107 "ServiceInstance": cmd.RequiredArgs.ServiceInstance, 108 }) 109 } 110 111 func (cmd UpgradeServiceCommand) serviceInstanceName() map[string]interface{} { 112 return map[string]interface{}{ 113 "ServiceInstanceName": cmd.RequiredArgs.ServiceInstance, 114 } 115 }