Skip to content

Commit fd4297e

Browse files
switch performance tier of nfs share (#1805)
* deprecate region from nfs apis * add switch performance tier * godo version update
1 parent ef248d1 commit fd4297e

File tree

12 files changed

+403
-32
lines changed

12 files changed

+403
-32
lines changed

commands/nfs.go

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,10 @@ func Nfs() *Command {
4242
AddStringFlag(cmdNfsCreate, "region", "r", "", "the region where the NFS share resides", requiredOpt())
4343
AddStringFlag(cmdNfsCreate, "size", "s", "", "the size of the NFS share in GiB", requiredOpt())
4444
AddStringSliceFlag(cmdNfsCreate, "vpc-ids", "", nil, "the list of VPC IDs that should be able to access the share", requiredOpt())
45+
AddStringFlag(cmdNfsCreate, "performance-tier", "", "", "the performance tier of the NFS share", requiredOpt())
4546
cmdNfsCreate.Example =
46-
`doctl nfs create --name sammy-nfs-share --region 'atl1' --size 50 --vpc-ids 74922c16-5466-42a5-ac58-0e8069918b6b
47-
doctl nfs create --name my-nfs-share --region 'nyc2' --size 100 --vpc-ids 74922c16-5466-42a5-ac58-0e8069918b6b`
47+
`doctl nfs create --name sammy-nfs-share --region 'atl1' --size 50 --vpc-ids 74922c16-5466-42a5-ac58-0e8069918b6b --performance-tier standard
48+
doctl nfs create --name my-nfs-share --region 'nyc2' --size 100 --vpc-ids 74922c16-5466-42a5-ac58-0e8069918b6b --performance-tier standard`
4849

4950
cmdNfsGet := CmdBuilder(cmd, nfsGet, "get [flags]", "Get an NFS share by ID", "Get an NFS share with the given ID and region.", Writer, displayerType(&displayers.Nfs{}))
5051
AddStringFlag(cmdNfsGet, "id", "", "", "the ID of the NFS share", requiredOpt())
@@ -89,6 +90,13 @@ doctl nfs list --region 'atl1' --format ID,Name,Size,Status`
8990
cmdNfsDetach.Example =
9091
`doctl nfs detach --region 'atl1' --id b050990d-4337-4a9d-9c8d-9f759a83936a --vpc_id example-vpc-id`
9192

93+
cmdNfsSwitchPerformanceTier := CmdBuilder(cmd, nfsSwitchPerformanceTier, "switch-performance-tier [flags]", "Switch the performance tier of an NFS share", "Switch the performance tier of an NFS share with the given ID and tier.", Writer)
94+
AddStringFlag(cmdNfsSwitchPerformanceTier, "id", "", "", "the ID of the NFS share", requiredOpt())
95+
AddStringFlag(cmdNfsSwitchPerformanceTier, "performance-tier", "", "", "the performance tier of the NFS share", requiredOpt())
96+
AddBoolFlag(cmdNfsSwitchPerformanceTier, doctl.ArgCommandWait, "", false, "Wait for action to complete")
97+
cmdNfsSwitchPerformanceTier.Example =
98+
`doctl nfs switch-performance-tier --id b050990d-4337-4a9d-9c8d-9f759a83936a --performance-tier high`
99+
92100
cmd.AddCommand(nfsSnapshots())
93101

94102
return cmd
@@ -160,11 +168,13 @@ func nfsCreate(c *CmdConfig) error {
160168
return err
161169
}
162170

171+
performanceTier, _ := c.Doit.GetString(c.NS, "performance-tier")
163172
r := &godo.NfsCreateRequest{
164-
Name: name,
165-
Region: region,
166-
SizeGib: size,
167-
VpcIDs: vpcIDs,
173+
Name: name,
174+
Region: region,
175+
SizeGib: size,
176+
VpcIDs: vpcIDs,
177+
PerformanceTier: performanceTier,
168178
}
169179

170180
share, err := c.Nfs().Create(r)
@@ -400,6 +410,38 @@ func nfsDetach(c *CmdConfig) error {
400410
return c.Display(item)
401411
}
402412

413+
func nfsSwitchPerformanceTier(c *CmdConfig) error {
414+
id, err := c.Doit.GetString(c.NS, "id")
415+
if err != nil {
416+
return err
417+
}
418+
419+
performanceTier, err := c.Doit.GetString(c.NS, "performance-tier")
420+
if err != nil {
421+
return err
422+
}
423+
424+
action, err := c.NfsActions().SwitchPerformanceTier(id, performanceTier)
425+
if err != nil {
426+
return err
427+
}
428+
429+
wait, err := c.Doit.GetBool(c.NS, doctl.ArgCommandWait)
430+
if err != nil {
431+
return err
432+
}
433+
434+
if wait {
435+
_, err := actionWait(c, action.ID, 5)
436+
if err != nil {
437+
return err
438+
}
439+
}
440+
441+
item := &displayers.NfsAction{NfsActions: []do.NfsAction{*action}}
442+
return c.Display(item)
443+
}
444+
403445
func displayNfs(c *CmdConfig, shares ...do.Nfs) error {
404446
item := &displayers.Nfs{NfsShares: shares}
405447
return c.Display(item)

commands/nfs_test.go

Lines changed: 56 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ var (
5959
func TestNfsCommand(t *testing.T) {
6060
cmd := Nfs()
6161
assert.NotNil(t, cmd)
62-
assertCommandNames(t, cmd, "create", "list", "get", "delete", "snapshot", "resize", "attach", "detach")
62+
assertCommandNames(t, cmd, "create", "list", "get", "delete", "snapshot", "resize", "attach", "detach", "switch-performance-tier")
6363
}
6464

6565
func TestRunNfsCreate(t *testing.T) {
@@ -80,10 +80,11 @@ func TestRunNfsCreate(t *testing.T) {
8080
withTestClient(t, func(config *CmdConfig, tm *tcMocks) {
8181
if !tc.expectErr {
8282
req := &godo.NfsCreateRequest{
83-
Name: "sammy-share",
84-
Region: "atl1",
85-
SizeGib: 1024,
86-
VpcIDs: []string{"a0ca4d02-1c86-4330-a4ff-310ee60c7de0"},
83+
Name: "sammy-share",
84+
Region: "atl1",
85+
SizeGib: 1024,
86+
VpcIDs: []string{"a0ca4d02-1c86-4330-a4ff-310ee60c7de0"},
87+
PerformanceTier: "standard",
8788
}
8889
tm.nfs.EXPECT().Create(req).Return(&testNfs, nil)
8990
}
@@ -92,7 +93,7 @@ func TestRunNfsCreate(t *testing.T) {
9293
config.Doit.Set(config.NS, "region", tc.args[1])
9394
config.Doit.Set(config.NS, "size", tc.args[2])
9495
config.Doit.Set(config.NS, "vpc-ids", []string{tc.args[3]})
95-
96+
config.Doit.Set(config.NS, "performance-tier", "standard")
9697
err := nfsCreate(config)
9798
if tc.expectErr {
9899
require.Error(t, err)
@@ -493,3 +494,52 @@ func TestRunNfsDetach(t *testing.T) {
493494
})
494495
}
495496
}
497+
498+
func TestRunNfsSwitchPerformanceTier(t *testing.T) {
499+
testCases := []struct {
500+
name string
501+
id string
502+
performanceTier string
503+
wait bool
504+
expectErr bool
505+
}{
506+
{
507+
name: "success without wait",
508+
id: testId,
509+
performanceTier: "standard",
510+
wait: false,
511+
expectErr: false,
512+
},
513+
{
514+
name: "success with wait",
515+
id: testId,
516+
performanceTier: "premium",
517+
wait: true,
518+
expectErr: false,
519+
},
520+
}
521+
522+
for _, tc := range testCases {
523+
t.Run(tc.name, func(t *testing.T) {
524+
withTestClient(t, func(config *CmdConfig, tm *tcMocks) {
525+
if !tc.expectErr {
526+
tm.nfsActions.EXPECT().SwitchPerformanceTier(tc.id, tc.performanceTier).Return(&testNfsAction, nil)
527+
if tc.wait {
528+
tm.actions.EXPECT().Get(testNfsAction.ID).Return(&testAction, nil)
529+
}
530+
}
531+
532+
config.Doit.Set(config.NS, "id", tc.id)
533+
config.Doit.Set(config.NS, "performance-tier", tc.performanceTier)
534+
config.Doit.Set(config.NS, "wait", tc.wait)
535+
536+
err := nfsSwitchPerformanceTier(config)
537+
if tc.expectErr {
538+
require.Error(t, err)
539+
} else {
540+
require.NoError(t, err)
541+
}
542+
})
543+
})
544+
}
545+
}

do/mocks/AppsService.go

Lines changed: 15 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

do/mocks/NfsActionsService.go

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

do/nfs_actions.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ type NfsActionsService interface {
3333
Snapshot(id, name, region string) (*NfsAction, error)
3434
Attach(id, vpcID, region string) (*NfsAction, error)
3535
Detach(id, vpcID, region string) (*NfsAction, error)
36+
SwitchPerformanceTier(id, tier string) (*NfsAction, error)
3637
}
3738

3839
type nfsActionsService struct {
@@ -79,3 +80,11 @@ func (s *nfsActionsService) Detach(id, vpcID, region string) (*NfsAction, error)
7980
}
8081
return &NfsAction{NfsAction: action}, nil
8182
}
83+
84+
func (s *nfsActionsService) SwitchPerformanceTier(id, tier string) (*NfsAction, error) {
85+
action, _, err := s.client.NfsActions.SwitchPerformanceTier(context.TODO(), id, tier)
86+
if err != nil {
87+
return nil, err
88+
}
89+
return &NfsAction{NfsAction: action}, nil
90+
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ go 1.24
55
require (
66
github.com/blang/semver v3.5.1+incompatible
77
github.com/creack/pty v1.1.21
8-
github.com/digitalocean/godo v1.174.0
8+
github.com/digitalocean/godo v1.175.0
99
github.com/docker/cli v24.0.5+incompatible
1010
github.com/docker/docker v25.0.6+incompatible
1111
github.com/docker/docker-credential-helpers v0.7.0 // indirect

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
9191
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
9292
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
9393
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
94-
github.com/digitalocean/godo v1.174.0 h1:9nVX8WqAPd7ZN9Yn63HeLRAI8m2vi9QeotcDvYmB+ns=
95-
github.com/digitalocean/godo v1.174.0/go.mod h1:xQsWpVCCbkDrWisHA72hPzPlnC+4W5w/McZY5ij9uvU=
94+
github.com/digitalocean/godo v1.175.0 h1:tpfwJFkBzpePxvvFazOn69TXctdxuFlOs7DMVXsI7oU=
95+
github.com/digitalocean/godo v1.175.0/go.mod h1:xQsWpVCCbkDrWisHA72hPzPlnC+4W5w/McZY5ij9uvU=
9696
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
9797
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
9898
github.com/docker/cli v24.0.5+incompatible h1:WeBimjvS0eKdH4Ygx+ihVq1Q++xg36M/rMi4aXAvodc=

vendor/github.com/digitalocean/godo/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/digitalocean/godo/godo.go

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/digitalocean/godo/nfs.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)