Skip to content

Commit 127f1ab

Browse files
authored
fix(vpc):better rendering of subnet in private network (#3600)
1 parent 833fb65 commit 127f1ab

9 files changed

+1020
-2048
lines changed

cmd/scw/testdata/test-all-usage-instance-server-delete-usage.golden

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ ARGS:
2121

2222
FLAGS:
2323
-h, --help help for delete
24+
-w, --wait wait until the server and its resources are deleted
2425

2526
GLOBAL FLAGS:
2627
-c, --config string The path to the config file

internal/namespaces/instance/v1/custom_server.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package instance
33
import (
44
"bytes"
55
"context"
6+
"errors"
67
"fmt"
78
"net"
89
"reflect"
@@ -746,6 +747,28 @@ func serverDeleteCommand() *core.Command {
746747
Short: "Stop a running server",
747748
},
748749
},
750+
WaitUsage: "wait until the server and its resources are deleted",
751+
WaitFunc: func(ctx context.Context, _, respI interface{}) (interface{}, error) {
752+
server := respI.(*core.SuccessResult).TargetResource.(*instance.Server)
753+
client := core.ExtractClient(ctx)
754+
api := instance.NewAPI(client)
755+
756+
notFoundErr := &scw.ResourceNotFoundError{}
757+
758+
_, err := api.WaitForServer(&instance.WaitForServerRequest{
759+
Zone: server.Zone,
760+
ServerID: server.ID,
761+
Timeout: scw.TimeDurationPtr(serverActionTimeout),
762+
RetryInterval: core.DefaultRetryInterval,
763+
})
764+
if err != nil {
765+
err = errors.Unwrap(err)
766+
if !errors.As(err, &notFoundErr) {
767+
return nil, err
768+
}
769+
}
770+
return respI, nil
771+
},
749772
Run: func(ctx context.Context, argsI interface{}) (interface{}, error) {
750773
deleteServerArgs := argsI.(*customDeleteServerRequest)
751774

@@ -854,7 +877,9 @@ func serverDeleteCommand() *core.Command {
854877
_, _ = interactive.Println(message[1])
855878
}
856879

857-
return &core.SuccessResult{}, nil
880+
return &core.SuccessResult{
881+
TargetResource: server.Server,
882+
}, nil
858883
},
859884
}
860885
}

internal/namespaces/vpc/v2/custom.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ package vpc
22

33
import (
44
"github.com/scaleway/scaleway-cli/v2/internal/core"
5+
"github.com/scaleway/scaleway-cli/v2/internal/human"
6+
"github.com/scaleway/scaleway-sdk-go/api/vpc/v2"
57
)
68

79
func GetCommands() *core.Commands {
810
cmds := GetGeneratedCommands()
911

1012
cmds.Remove("vpc", "post")
1113
cmds.MustFind("vpc", "private-network", "get").Override(privateNetworkGetBuilder)
14+
human.RegisterMarshalerFunc(vpc.PrivateNetwork{}, privateNetworkMarshalerFunc)
1215

1316
return cmds
1417
}

internal/namespaces/vpc/v2/custom_private_network.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55

66
"github.com/scaleway/scaleway-cli/v2/internal/core"
7+
"github.com/scaleway/scaleway-cli/v2/internal/human"
78
"github.com/scaleway/scaleway-sdk-go/api/baremetal/v1"
89
"github.com/scaleway/scaleway-sdk-go/api/instance/v1"
910
"github.com/scaleway/scaleway-sdk-go/api/k8s/v1"
@@ -15,6 +16,28 @@ import (
1516
"github.com/scaleway/scaleway-sdk-go/scw"
1617
)
1718

19+
func privateNetworkMarshalerFunc(i interface{}, opt *human.MarshalOpt) (string, error) {
20+
type tmp vpc.PrivateNetwork
21+
pn := tmp(i.(vpc.PrivateNetwork))
22+
23+
// Sections
24+
opt.Sections = []*human.MarshalSection{
25+
26+
{
27+
FieldName: "Subnets",
28+
Title: "Subnets",
29+
HideIfEmpty: true,
30+
},
31+
}
32+
33+
str, err := human.Marshal(pn, opt)
34+
if err != nil {
35+
return "", err
36+
}
37+
38+
return str, nil
39+
}
40+
1841
func privateNetworkGetBuilder(c *core.Command) *core.Command {
1942
c.Interceptor = func(ctx context.Context, argsI interface{}, runner core.CommandRunner) (interface{}, error) {
2043
getPNResp, err := runner(ctx, argsI)

internal/namespaces/vpc/v2/helper_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ func createInstance() core.BeforeFunc {
1212
}
1313

1414
func deleteInstance() core.AfterFunc {
15-
return core.ExecAfterCmd("scw instance server delete {{ .Instance.ID }}")
15+
return core.ExecAfterCmd("scw instance server delete {{ .Instance.ID }} --wait")
1616
}
1717

1818
func createPN() core.BeforeFunc {

internal/namespaces/vpc/v2/testdata/test-get-private-network-multiple.cassette.yaml

Lines changed: 541 additions & 1545 deletions
Large diffs are not rendered by default.
Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,79 +1,79 @@
11
🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲
22
🟩🟩🟩 STDOUT️ 🟩🟩🟩️
3-
ID 97e7496d-27ab-42e3-befa-f0f17148d34b
4-
Name cli-pn-romantic-khorana
5-
OrganizationID fa1e3217-dc80-42ac-85c3-3f034b78b552
6-
ProjectID fa1e3217-dc80-42ac-85c3-3f034b78b552
3+
ID 70b32810-d6e4-4301-b6b1-88b87fae93b0
4+
Name cli-pn-sweet-lehmann
5+
OrganizationID 46fd79d8-1a35-4548-bfb8-03df51a0ebae
6+
ProjectID 46fd79d8-1a35-4548-bfb8-03df51a0ebae
77
Region fr-par
88
CreatedAt few seconds ago
99
UpdatedAt few seconds ago
10-
VpcID 1ec1ecb6-8f58-4f7c-92cc-53c2a5ae519c
10+
VpcID b1972fa8-5349-4d37-8777-f4f205bbd322
1111
DHCPEnabled true
1212

1313
Instance Servers:
14-
ID NAME STATE NIC ID MAC ADDRESS
15-
b2038da1-b1a4-470f-925d-ade221f6bc75 cli-srv-pedantic-gates archived fde85b33-3841-479c-a288-df20b54daaf3 02:00:00:18:64:20
14+
ID NAME STATE NIC ID MAC ADDRESS
15+
cc5d0649-1f7b-4aca-bcaa-041925261258 cli-srv-nifty-ramanujan archived c827fc5b-e253-4460-9096-80381901879c 02:00:00:18:d4:ca
1616

1717
Load-Balancers:
1818
ID NAME STATE
19-
c10c8015-28de-4c2c-a271-58b1f20fb2a5 cli-test ready
19+
b2615282-305e-41e6-9210-db7bda856838 cli-test ready
2020

2121
Rdb Instances:
2222
ID NAME STATE ENDPOINT ID
23-
44c31418-0395-41c7-a934-c073ec151c95 cli-test ready 82532a42-39de-4cbf-a45c-d1e848af814d
23+
90ab9d81-822c-4b58-8daf-5bda3a6dcef5 cli-test ready 6ea5e44c-b687-483c-88dc-9fc1e770b5c0
2424

2525
Subnets:
2626
ID CREATED AT UPDATED AT SUBNET
27-
329839cf-f397-4bf7-b0cd-10d8f9329627 few seconds ago few seconds ago 172.16.64.0/22
28-
e537d54f-0c1f-4682-9a14-b9e7fd86b05d few seconds ago few seconds ago fd63:256c:45f7:bcfc::/64
27+
389c4a16-177b-4af3-860e-27b88f85c10b few seconds ago few seconds ago 172.16.40.0/22
28+
f9ae0cd0-9bf1-4c14-9a1b-62f9eecdd6a5 few seconds ago few seconds ago fd5d:9132:befe:2317::/64
2929
🟩🟩🟩 JSON STDOUT 🟩🟩🟩
3030
{
31-
"id": "97e7496d-27ab-42e3-befa-f0f17148d34b",
32-
"name": "cli-pn-romantic-khorana",
33-
"organization_id": "fa1e3217-dc80-42ac-85c3-3f034b78b552",
34-
"project_id": "fa1e3217-dc80-42ac-85c3-3f034b78b552",
31+
"id": "70b32810-d6e4-4301-b6b1-88b87fae93b0",
32+
"name": "cli-pn-sweet-lehmann",
33+
"organization_id": "46fd79d8-1a35-4548-bfb8-03df51a0ebae",
34+
"project_id": "46fd79d8-1a35-4548-bfb8-03df51a0ebae",
3535
"region": "fr-par",
3636
"tags": [],
3737
"created_at": "1970-01-01T00:00:00.0Z",
3838
"updated_at": "1970-01-01T00:00:00.0Z",
3939
"subnets": [
4040
{
41-
"id": "329839cf-f397-4bf7-b0cd-10d8f9329627",
41+
"id": "389c4a16-177b-4af3-860e-27b88f85c10b",
4242
"created_at": "1970-01-01T00:00:00.0Z",
4343
"updated_at": "1970-01-01T00:00:00.0Z",
44-
"subnet": "172.16.64.0/22"
44+
"subnet": "172.16.40.0/22"
4545
},
4646
{
47-
"id": "e537d54f-0c1f-4682-9a14-b9e7fd86b05d",
47+
"id": "f9ae0cd0-9bf1-4c14-9a1b-62f9eecdd6a5",
4848
"created_at": "1970-01-01T00:00:00.0Z",
4949
"updated_at": "1970-01-01T00:00:00.0Z",
50-
"subnet": "fd63:256c:45f7:bcfc::/64"
50+
"subnet": "fd5d:9132:befe:2317::/64"
5151
}
5252
],
53-
"vpc_id": "1ec1ecb6-8f58-4f7c-92cc-53c2a5ae519c",
53+
"vpc_id": "b1972fa8-5349-4d37-8777-f4f205bbd322",
5454
"dhcp_enabled": true,
5555
"instance_servers": [
5656
{
57-
"id": "b2038da1-b1a4-470f-925d-ade221f6bc75",
58-
"name": "cli-srv-pedantic-gates",
57+
"id": "cc5d0649-1f7b-4aca-bcaa-041925261258",
58+
"name": "cli-srv-nifty-ramanujan",
5959
"state": "stopped",
60-
"nic_id": "fde85b33-3841-479c-a288-df20b54daaf3",
61-
"mac": "02:00:00:18:64:20"
60+
"nic_id": "c827fc5b-e253-4460-9096-80381901879c",
61+
"mac": "02:00:00:18:d4:ca"
6262
}
6363
],
6464
"lbs": [
6565
{
66-
"id": "c10c8015-28de-4c2c-a271-58b1f20fb2a5",
66+
"id": "b2615282-305e-41e6-9210-db7bda856838",
6767
"name": "cli-test",
6868
"state": "ready"
6969
}
7070
],
7171
"rdb_instances": [
7272
{
73-
"id": "44c31418-0395-41c7-a934-c073ec151c95",
73+
"id": "90ab9d81-822c-4b58-8daf-5bda3a6dcef5",
7474
"name": "cli-test",
7575
"state": "ready",
76-
"endpoint_id": "82532a42-39de-4cbf-a45c-d1e848af814d"
76+
"endpoint_id": "6ea5e44c-b687-483c-88dc-9fc1e770b5c0"
7777
}
7878
]
7979
}

0 commit comments

Comments
 (0)