Skip to content

Commit 044e98e

Browse files
authored
fix(redis): add better rendering redis-cluster-acl-rules-endpoints (#3638)
Co-authored-by: lmasson <[email protected]>
1 parent e34c5c7 commit 044e98e

9 files changed

+173
-131
lines changed

internal/human/marshal_func.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ func init() {
7878
marshalerFuncs.Store(reflect.TypeOf(net.IP{}), func(i interface{}, opt *MarshalOpt) (string, error) {
7979
return fmt.Sprintf("%v", i.(net.IP)), nil
8080
})
81+
marshalerFuncs.Store(reflect.TypeOf([]net.IP{}), func(i interface{}, opt *MarshalOpt) (string, error) {
82+
return fmt.Sprintf("%v", i), nil
83+
})
8184
marshalerFuncs.Store(reflect.TypeOf(scw.IPNet{}), func(i interface{}, opt *MarshalOpt) (string, error) {
8285
v := i.(scw.IPNet)
8386
str := v.String()

internal/namespaces/redis/v1/custom.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,16 @@ package redis
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/redis/v1"
57
)
68

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

12+
human.RegisterMarshalerFunc(redis.Cluster{}, redisClusterGetMarshalerFunc)
13+
human.RegisterMarshalerFunc(redis.Cluster{}.Endpoints, redisEndpointsClusterGetMarshalerFunc)
14+
1015
cmds.Merge(core.NewCommands(clusterWaitCommand()))
1116
cmds.MustFind("redis", "cluster", "create").Override(clusterCreateBuilder)
1217
cmds.MustFind("redis", "cluster", "delete").Override(clusterDeleteBuilder)

internal/namespaces/redis/v1/custom_cluster.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ package redis
33
import (
44
"context"
55
"errors"
6+
"log"
67
"net/http"
78
"reflect"
89
"time"
910

1011
"github.com/scaleway/scaleway-cli/v2/internal/core"
12+
"github.com/scaleway/scaleway-cli/v2/internal/human"
1113
"github.com/scaleway/scaleway-sdk-go/api/redis/v1"
1214
"github.com/scaleway/scaleway-sdk-go/scw"
1315
)
@@ -156,3 +158,49 @@ func ACLAddListBuilder(c *core.Command) *core.Command {
156158
})
157159
return c
158160
}
161+
162+
func redisEndpointsClusterGetMarshalerFunc(i interface{}, opt *human.MarshalOpt) (string, error) {
163+
type tmp []*redis.Endpoint
164+
redisEndpointsClusterResponse := tmp(i.([]*redis.Endpoint))
165+
opt.Fields = []*human.MarshalFieldOpt{
166+
{
167+
FieldName: "ID",
168+
Label: "ID",
169+
},
170+
{
171+
FieldName: "Port",
172+
Label: "Port",
173+
},
174+
{
175+
FieldName: "IPs",
176+
Label: "IPs",
177+
},
178+
}
179+
str, err := human.Marshal(redisEndpointsClusterResponse, opt)
180+
if err != nil {
181+
return "", err
182+
}
183+
return str, nil
184+
}
185+
186+
func redisClusterGetMarshalerFunc(i interface{}, opt *human.MarshalOpt) (string, error) {
187+
type tmp redis.Cluster
188+
redisClusterResponse := tmp(i.(redis.Cluster))
189+
log.Println("redis ", i.(redis.Cluster).Endpoints[0])
190+
opt.Sections = []*human.MarshalSection{
191+
{
192+
FieldName: "Endpoints",
193+
Title: "Endpoints",
194+
},
195+
{
196+
FieldName: "ACLRules",
197+
Title: "ACLRules",
198+
},
199+
}
200+
str, err := human.Marshal(redisClusterResponse, opt)
201+
if err != nil {
202+
return "", err
203+
}
204+
205+
return str, nil
206+
}

internal/namespaces/redis/v1/testdata/test-endpoints-single-public-endpoint.golden

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲
22
🟩🟩🟩 STDOUT️ 🟩🟩🟩️
3-
ID e26d0bd5-e04d-4d92-8f39-7df210a40529
4-
Name 1-pub-endpoint
5-
ProjectID fa1e3217-dc80-42ac-85c3-3f034b78b552
6-
Status ready
7-
Version 7.0.5
8-
Endpoints.0.Port 6379
9-
Endpoints.0.IPs.0 163.172.151.197
10-
Endpoints.0.ID 9212bfab-dead-42d6-80e2-5eaa4f8be5a6
11-
NodeType RED1-micro
12-
CreatedAt few seconds ago
13-
UpdatedAt few seconds ago
14-
TLSEnabled false
15-
ClusterSize 1
16-
Zone fr-par-1
17-
UserName admin
3+
ID e26d0bd5-e04d-4d92-8f39-7df210a40529
4+
Name 1-pub-endpoint
5+
ProjectID fa1e3217-dc80-42ac-85c3-3f034b78b552
6+
Status ready
7+
Version 7.0.5
8+
NodeType RED1-micro
9+
CreatedAt few seconds ago
10+
UpdatedAt few seconds ago
11+
TLSEnabled false
12+
ClusterSize 1
13+
Zone fr-par-1
14+
UserName admin
15+
16+
Endpoints:
17+
ID Port IPs
18+
9212bfab-dead-42d6-80e2-5eaa4f8be5a6 6379 [163.172.151.197]
19+
20+
ACLRules:
21+
ID IP CIDR DESCRIPTION
1822
🟩🟩🟩 JSON STDOUT 🟩🟩🟩
1923
{
2024
"id": "e26d0bd5-e04d-4d92-8f39-7df210a40529",

internal/namespaces/redis/v1/testdata/test-endpoints-single-static-private-endpoint.golden

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲
22
🟩🟩🟩 STDOUT️ 🟩🟩🟩️
3-
ID 62e071a3-e206-471b-afdb-1bc013b7c426
4-
Name 1-static-priv-endpoint
5-
ProjectID fa1e3217-dc80-42ac-85c3-3f034b78b552
6-
Status ready
7-
Version 7.0.5
8-
Endpoints.0.Port 6379
9-
Endpoints.0.PrivateNetwork.ID 9104c8f2-09a7-4124-a44c-26a699d143cc
10-
Endpoints.0.PrivateNetwork.ServiceIPs.0 172.16.4.1/22
11-
Endpoints.0.PrivateNetwork.Zone fr-par-1
12-
Endpoints.0.PrivateNetwork.ProvisioningMode static
13-
Endpoints.0.IPs.0 172.16.4.1
14-
Endpoints.0.ID a56f3126-4e97-46cf-89c6-f179359f96e9
15-
NodeType RED1-micro
16-
CreatedAt few seconds ago
17-
UpdatedAt few seconds ago
18-
TLSEnabled false
19-
ClusterSize 1
20-
Zone fr-par-1
21-
UserName admin
3+
ID 62e071a3-e206-471b-afdb-1bc013b7c426
4+
Name 1-static-priv-endpoint
5+
ProjectID fa1e3217-dc80-42ac-85c3-3f034b78b552
6+
Status ready
7+
Version 7.0.5
8+
NodeType RED1-micro
9+
CreatedAt few seconds ago
10+
UpdatedAt few seconds ago
11+
TLSEnabled false
12+
ClusterSize 1
13+
Zone fr-par-1
14+
UserName admin
15+
16+
Endpoints:
17+
ID Port IPs
18+
a56f3126-4e97-46cf-89c6-f179359f96e9 6379 [172.16.4.1]
19+
20+
ACLRules:
21+
ID IP CIDR DESCRIPTION
2222
🟩🟩🟩 JSON STDOUT 🟩🟩🟩
2323
{
2424
"id": "62e071a3-e206-471b-afdb-1bc013b7c426",

internal/namespaces/redis/v1/testdata/test-endpoints-two-static-private-endpoints.golden

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,25 @@
11
🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲
22
🟩🟩🟩 STDOUT️ 🟩🟩🟩️
3-
ID 89ee8049-b2db-4204-96f0-4a1e69f87e45
4-
Name 2-static-priv-endpoints
5-
ProjectID fa1e3217-dc80-42ac-85c3-3f034b78b552
6-
Status ready
7-
Version 7.0.5
8-
Endpoints.0.Port 6379
9-
Endpoints.0.PrivateNetwork.ID 7d5d5e13-7f07-44df-962d-5edad547ee62
10-
Endpoints.0.PrivateNetwork.ServiceIPs.0 172.16.4.1/22
11-
Endpoints.0.PrivateNetwork.Zone fr-par-1
12-
Endpoints.0.PrivateNetwork.ProvisioningMode static
13-
Endpoints.0.IPs.0 172.16.4.1
14-
Endpoints.0.ID 13199053-663b-40e8-bf06-56161d32271b
15-
Endpoints.1.Port 6379
16-
Endpoints.1.PrivateNetwork.ID f8ecd537-56c8-49a6-9da0-e4e0ba6d2c12
17-
Endpoints.1.PrivateNetwork.ServiceIPs.0 10.16.4.1/22
18-
Endpoints.1.PrivateNetwork.Zone fr-par-1
19-
Endpoints.1.PrivateNetwork.ProvisioningMode static
20-
Endpoints.1.IPs.0 10.16.4.1
21-
Endpoints.1.ID 1ede35c6-c45a-4a24-b34b-0486a33c01f8
22-
NodeType RED1-micro
23-
CreatedAt few seconds ago
24-
UpdatedAt few seconds ago
25-
TLSEnabled false
26-
ClusterSize 1
27-
Zone fr-par-1
28-
UserName admin
3+
ID 89ee8049-b2db-4204-96f0-4a1e69f87e45
4+
Name 2-static-priv-endpoints
5+
ProjectID fa1e3217-dc80-42ac-85c3-3f034b78b552
6+
Status ready
7+
Version 7.0.5
8+
NodeType RED1-micro
9+
CreatedAt few seconds ago
10+
UpdatedAt few seconds ago
11+
TLSEnabled false
12+
ClusterSize 1
13+
Zone fr-par-1
14+
UserName admin
15+
16+
Endpoints:
17+
ID Port IPs
18+
13199053-663b-40e8-bf06-56161d32271b 6379 [172.16.4.1]
19+
1ede35c6-c45a-4a24-b34b-0486a33c01f8 6379 [10.16.4.1]
20+
21+
ACLRules:
22+
ID IP CIDR DESCRIPTION
2923
🟩🟩🟩 JSON STDOUT 🟩🟩🟩
3024
{
3125
"id": "89ee8049-b2db-4204-96f0-4a1e69f87e45",

internal/namespaces/redis/v1/testdata/test-ipam-config-both-ipam-and-static-private-endpoints.golden

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,25 @@
11
🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲
22
🟩🟩🟩 STDOUT️ 🟩🟩🟩️
3-
ID 79e54364-9013-427d-9e56-8085da929b70
4-
Name 1-ipam-1-static-priv-endpoints
5-
ProjectID fa1e3217-dc80-42ac-85c3-3f034b78b552
6-
Status ready
7-
Version 7.0.5
8-
Endpoints.0.Port 6379
9-
Endpoints.0.PrivateNetwork.ID 72e054f3-77b4-4e65-b89d-7c955fe92d58
10-
Endpoints.0.PrivateNetwork.ServiceIPs.0 10.16.4.1/22
11-
Endpoints.0.PrivateNetwork.Zone fr-par-1
12-
Endpoints.0.PrivateNetwork.ProvisioningMode static
13-
Endpoints.0.IPs.0 10.16.4.1
14-
Endpoints.0.ID 0b9e8061-e10c-4fb8-815d-1dfd94bf2745
15-
Endpoints.1.Port 6379
16-
Endpoints.1.PrivateNetwork.ID eacb55ae-6fce-4205-bce7-7dd55f710b11
17-
Endpoints.1.PrivateNetwork.ServiceIPs.0 172.16.228.2/22
18-
Endpoints.1.PrivateNetwork.Zone fr-par-1
19-
Endpoints.1.PrivateNetwork.ProvisioningMode ipam
20-
Endpoints.1.IPs.0 172.16.228.2
21-
Endpoints.1.ID c0be2bbb-d4d6-4043-9aaa-f8a96e1685dc
22-
NodeType RED1-micro
23-
CreatedAt few seconds ago
24-
UpdatedAt few seconds ago
25-
TLSEnabled false
26-
ClusterSize 1
27-
Zone fr-par-1
28-
UserName admin
3+
ID 79e54364-9013-427d-9e56-8085da929b70
4+
Name 1-ipam-1-static-priv-endpoints
5+
ProjectID fa1e3217-dc80-42ac-85c3-3f034b78b552
6+
Status ready
7+
Version 7.0.5
8+
NodeType RED1-micro
9+
CreatedAt few seconds ago
10+
UpdatedAt few seconds ago
11+
TLSEnabled false
12+
ClusterSize 1
13+
Zone fr-par-1
14+
UserName admin
15+
16+
Endpoints:
17+
ID Port IPs
18+
0b9e8061-e10c-4fb8-815d-1dfd94bf2745 6379 [10.16.4.1]
19+
c0be2bbb-d4d6-4043-9aaa-f8a96e1685dc 6379 [172.16.228.2]
20+
21+
ACLRules:
22+
ID IP CIDR DESCRIPTION
2923
🟩🟩🟩 JSON STDOUT 🟩🟩🟩
3024
{
3125
"id": "79e54364-9013-427d-9e56-8085da929b70",

internal/namespaces/redis/v1/testdata/test-ipam-config-single-ipam-private-endpoint.golden

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲
22
🟩🟩🟩 STDOUT️ 🟩🟩🟩️
3-
ID caac7795-b1c1-407f-8635-7da21563691e
4-
Name 1-ipam-priv-endpoint
5-
ProjectID fa1e3217-dc80-42ac-85c3-3f034b78b552
6-
Status ready
7-
Version 7.0.5
8-
Endpoints.0.Port 6379
9-
Endpoints.0.PrivateNetwork.ID 8084b2d3-6adc-428d-a04f-378332590f92
10-
Endpoints.0.PrivateNetwork.ServiceIPs.0 172.16.232.2/22
11-
Endpoints.0.PrivateNetwork.Zone fr-par-1
12-
Endpoints.0.PrivateNetwork.ProvisioningMode ipam
13-
Endpoints.0.IPs.0 172.16.232.2
14-
Endpoints.0.ID 2aaf6524-7ce6-4f6e-96aa-3f5cdc24ce04
15-
NodeType RED1-micro
16-
CreatedAt few seconds ago
17-
UpdatedAt few seconds ago
18-
TLSEnabled false
19-
ClusterSize 1
20-
Zone fr-par-1
21-
UserName admin
3+
ID caac7795-b1c1-407f-8635-7da21563691e
4+
Name 1-ipam-priv-endpoint
5+
ProjectID fa1e3217-dc80-42ac-85c3-3f034b78b552
6+
Status ready
7+
Version 7.0.5
8+
NodeType RED1-micro
9+
CreatedAt few seconds ago
10+
UpdatedAt few seconds ago
11+
TLSEnabled false
12+
ClusterSize 1
13+
Zone fr-par-1
14+
UserName admin
15+
16+
Endpoints:
17+
ID Port IPs
18+
2aaf6524-7ce6-4f6e-96aa-3f5cdc24ce04 6379 [172.16.232.2]
19+
20+
ACLRules:
21+
ID IP CIDR DESCRIPTION
2222
🟩🟩🟩 JSON STDOUT 🟩🟩🟩
2323
{
2424
"id": "caac7795-b1c1-407f-8635-7da21563691e",

internal/namespaces/redis/v1/testdata/test-ipam-config-two-ipam-private-endpoints.golden

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,25 @@
11
🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲
22
🟩🟩🟩 STDOUT️ 🟩🟩🟩️
3-
ID 7033bf65-a914-4612-98dd-20e677f7e040
4-
Name 2-ipam-priv-endpoints
5-
ProjectID fa1e3217-dc80-42ac-85c3-3f034b78b552
6-
Status ready
7-
Version 7.0.5
8-
Endpoints.0.Port 6379
9-
Endpoints.0.PrivateNetwork.ID 0bb418be-5e8b-4150-ad3c-ff807890bcdc
10-
Endpoints.0.PrivateNetwork.ServiceIPs.0 172.16.220.2/22
11-
Endpoints.0.PrivateNetwork.Zone fr-par-1
12-
Endpoints.0.PrivateNetwork.ProvisioningMode ipam
13-
Endpoints.0.IPs.0 172.16.220.2
14-
Endpoints.0.ID 003d16e6-7539-4058-9e59-b81b3fe8a4e6
15-
Endpoints.1.Port 6379
16-
Endpoints.1.PrivateNetwork.ID 50070cff-34e2-4bc0-96d2-c305dce86277
17-
Endpoints.1.PrivateNetwork.ServiceIPs.0 172.16.208.2/22
18-
Endpoints.1.PrivateNetwork.Zone fr-par-1
19-
Endpoints.1.PrivateNetwork.ProvisioningMode ipam
20-
Endpoints.1.IPs.0 172.16.208.2
21-
Endpoints.1.ID e6ac24ff-015a-4d2a-a29e-4b2eae03b259
22-
NodeType RED1-micro
23-
CreatedAt few seconds ago
24-
UpdatedAt few seconds ago
25-
TLSEnabled false
26-
ClusterSize 1
27-
Zone fr-par-1
28-
UserName admin
3+
ID 7033bf65-a914-4612-98dd-20e677f7e040
4+
Name 2-ipam-priv-endpoints
5+
ProjectID fa1e3217-dc80-42ac-85c3-3f034b78b552
6+
Status ready
7+
Version 7.0.5
8+
NodeType RED1-micro
9+
CreatedAt few seconds ago
10+
UpdatedAt few seconds ago
11+
TLSEnabled false
12+
ClusterSize 1
13+
Zone fr-par-1
14+
UserName admin
15+
16+
Endpoints:
17+
ID Port IPs
18+
003d16e6-7539-4058-9e59-b81b3fe8a4e6 6379 [172.16.220.2]
19+
e6ac24ff-015a-4d2a-a29e-4b2eae03b259 6379 [172.16.208.2]
20+
21+
ACLRules:
22+
ID IP CIDR DESCRIPTION
2923
🟩🟩🟩 JSON STDOUT 🟩🟩🟩
3024
{
3125
"id": "7033bf65-a914-4612-98dd-20e677f7e040",

0 commit comments

Comments
 (0)