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