forked from digitalocean/doctl
/
volumes.go
129 lines (103 loc) · 2.73 KB
/
volumes.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package commands
import (
"github.com/digitalocean/doctl"
"github.com/digitalocean/doctl/do"
"github.com/digitalocean/godo"
"github.com/dustin/go-humanize"
"github.com/spf13/cobra"
)
// Volume creates the Volume command
func Volume() *Command {
cmd := &Command{
Command: &cobra.Command{
Use: "volume",
Short: "volume commands",
Long: "volume is used to access volume commands",
},
}
CmdBuilder(cmd, RunVolumeList, "list", "list volume", Writer,
aliasOpt("ls"), displayerType(&volume{}))
cmdVolumeCreate := CmdBuilder(cmd, RunVolumeCreate, "create [name]", "create a volume", Writer,
aliasOpt("c"), displayerType(&volume{}))
AddStringFlag(cmdVolumeCreate, doctl.ArgVolumeSize, "4TiB", "Volume size",
requiredOpt())
AddStringFlag(cmdVolumeCreate, doctl.ArgVolumeDesc, "", "Volume description")
AddStringFlag(cmdVolumeCreate, doctl.ArgVolumeRegion, "", "Volume region",
requiredOpt())
CmdBuilder(cmd, RunVolumeDelete, "delete [ID]", "delete a volume", Writer,
aliasOpt("rm"))
CmdBuilder(cmd, RunVolumeGet, "get [ID]", "get a volume", Writer, aliasOpt("g"),
displayerType(&volume{}))
return cmd
}
// RunVolumeList returns a list of volumes.
func RunVolumeList(c *CmdConfig) error {
al := c.Volumes()
d, err := al.List()
if err != nil {
return err
}
item := &volume{volumes: d}
return c.Display(item)
}
// RunVolumeCreate creates a volume.
func RunVolumeCreate(c *CmdConfig) error {
if len(c.Args) == 0 {
return doctl.NewMissingArgsErr(c.NS)
}
name := c.Args[0]
sizeStr, err := c.Doit.GetString(c.NS, doctl.ArgVolumeSize)
if err != nil {
return err
}
size, err := humanize.ParseBytes(sizeStr)
if err != nil {
return err
}
desc, err := c.Doit.GetString(c.NS, doctl.ArgVolumeDesc)
if err != nil {
return err
}
region, err := c.Doit.GetString(c.NS, doctl.ArgVolumeRegion)
if err != nil {
return err
}
var createVolume godo.VolumeCreateRequest
createVolume.Name = name
createVolume.SizeGigaBytes = int64(size / (1 << 30))
createVolume.Description = desc
createVolume.Region = region
al := c.Volumes()
d, err := al.CreateVolume(&createVolume)
if err != nil {
return err
}
item := &volume{volumes: []do.Volume{*d}}
return c.Display(item)
}
// RunVolumeDelete deletes a volume.
func RunVolumeDelete(c *CmdConfig) error {
if len(c.Args) == 0 {
return doctl.NewMissingArgsErr(c.NS)
}
id := c.Args[0]
al := c.Volumes()
if err := al.DeleteVolume(id); err != nil {
return err
}
return nil
}
// RunVolumeGet gets a volume.
func RunVolumeGet(c *CmdConfig) error {
if len(c.Args) == 0 {
return doctl.NewMissingArgsErr(c.NS)
}
id := c.Args[0]
al := c.Volumes()
d, err := al.Get(id)
if err != nil {
return err
}
item := &volume{volumes: []do.Volume{*d}}
return c.Display(item)
}