-
Notifications
You must be signed in to change notification settings - Fork 7
/
load.go
78 lines (60 loc) · 2 KB
/
load.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
package server
import (
"fmt"
"github.com/UpCloudLtd/upcloud-cli/v3/internal/commands"
"github.com/UpCloudLtd/upcloud-cli/v3/internal/commands/storage"
"github.com/UpCloudLtd/upcloud-cli/v3/internal/completion"
"github.com/UpCloudLtd/upcloud-cli/v3/internal/output"
"github.com/UpCloudLtd/upcloud-cli/v3/internal/resolver"
"github.com/UpCloudLtd/upcloud-go-api/v8/upcloud/request"
"github.com/spf13/pflag"
)
type loadCommand struct {
*commands.BaseCommand
resolver.CachingServer
completion.Server
params loadParams
}
type loadParams struct {
request.LoadCDROMRequest
}
// LoadCommand creates the "server load" command
func LoadCommand() commands.Command {
return &loadCommand{
BaseCommand: commands.New(
"load",
"Load a CD-ROM into the server",
"upctl server load my_server4 --storage 01000000-0000-4000-8000-000080030101",
),
}
}
var defaultLoadParams = &loadParams{
LoadCDROMRequest: request.LoadCDROMRequest{},
}
// InitCommand implements Command.InitCommand
func (s *loadCommand) InitCommand() {
s.params = loadParams{LoadCDROMRequest: request.LoadCDROMRequest{}}
flagSet := &pflag.FlagSet{}
flagSet.StringVar(&s.params.StorageUUID, "storage", defaultLoadParams.StorageUUID, "The UUID of the storage to be loaded in the CD-ROM device.")
s.AddFlags(flagSet)
_ = s.Cobra().MarkFlagRequired("storage")
}
// Execute implements commands.MultipleArgumentCommand
func (s *loadCommand) Execute(exec commands.Executor, uuid string) (output.Output, error) {
svc := exec.Storage()
strg, err := storage.SearchSingleStorage(s.params.StorageUUID, exec)
if err != nil {
return nil, err
}
s.params.StorageUUID = strg.UUID
req := s.params.LoadCDROMRequest
req.ServerUUID = uuid
msg := fmt.Sprintf("Loading %q as a CD-ROM of server %q", req.StorageUUID, req.ServerUUID)
exec.PushProgressStarted(msg)
res, err := svc.LoadCDROM(exec.Context(), &req)
if err != nil {
return commands.HandleError(exec, msg, err)
}
exec.PushProgressSuccess(msg)
return output.OnlyMarshaled{Value: res}, nil
}