@@ -2,11 +2,13 @@ package rdb
2
2
3
3
import (
4
4
"context"
5
+ "reflect"
5
6
6
7
"github.com/fatih/color"
7
8
"github.com/scaleway/scaleway-cli/v2/internal/core"
8
9
"github.com/scaleway/scaleway-cli/v2/internal/human"
9
10
"github.com/scaleway/scaleway-sdk-go/api/rdb/v1"
11
+ "github.com/scaleway/scaleway-sdk-go/scw"
10
12
)
11
13
12
14
var (
@@ -17,30 +19,101 @@ var (
17
19
)
18
20
19
21
func aclAddBuilder (c * core.Command ) * core.Command {
22
+ type customAddACLRequest struct {
23
+ * rdb.AddInstanceACLRulesRequest
24
+ Rules []* rdb.ACLRuleRequest
25
+ }
26
+
27
+ c .ArgSpecs .GetByName ("rules.{index}.ip" ).Name = "rules.{index}.ip"
28
+ c .ArgSpecs .GetByName ("rules.{index}.description" ).Name = "rules.{index}.description"
29
+
30
+ c .ArgsType = reflect .TypeOf (customAddACLRequest {})
31
+
20
32
c .Interceptor = func (ctx context.Context , argsI interface {}, runner core.CommandRunner ) (interface {}, error ) {
21
- aclAddResponseI , err := runner (ctx , argsI )
33
+ args := argsI .(* customAddACLRequest )
34
+
35
+ request := args .AddInstanceACLRulesRequest
36
+ request .Rules = args .Rules
37
+
38
+ aclAddResponseI , err := runner (ctx , request )
22
39
if err != nil {
23
40
return nil , err
24
41
}
42
+
25
43
aclAddResponse := aclAddResponseI .(* rdb.AddInstanceACLRulesResponse )
26
44
return aclAddResponse .Rules , nil
27
45
}
28
46
47
+ c .WaitFunc = func (ctx context.Context , argsI , respI interface {}) (interface {}, error ) {
48
+ args := argsI .(* customAddACLRequest )
49
+
50
+ api := rdb .NewAPI (core .ExtractClient (ctx ))
51
+ _ , err := api .WaitForInstance (& rdb.WaitForInstanceRequest {
52
+ InstanceID : args .InstanceID ,
53
+ Region : args .Region ,
54
+ Timeout : scw .TimeDurationPtr (instanceActionTimeout ),
55
+ RetryInterval : core .DefaultRetryInterval ,
56
+ })
57
+ if err != nil {
58
+ return nil , err
59
+ }
60
+
61
+ return respI .([]* rdb.ACLRule ), nil
62
+ }
63
+
29
64
return c
30
65
}
31
66
32
67
func aclDeleteBuilder (c * core.Command ) * core.Command {
68
+ type deleteRules struct {
69
+ IP string `json:"ip"`
70
+ }
71
+
72
+ type customDeleteACLRequest struct {
73
+ * rdb.DeleteInstanceACLRulesRequest
74
+ Rules []deleteRules
75
+ }
76
+
77
+ c .ArgSpecs .GetByName ("acl-rule-ips.{index}" ).Name = "rules.{index}.ip"
78
+
79
+ c .ArgsType = reflect .TypeOf (customDeleteACLRequest {})
80
+
33
81
c .Interceptor = func (ctx context.Context , argsI interface {}, runner core.CommandRunner ) (interface {}, error ) {
34
- aclDeleteResponseI , err := runner (ctx , argsI )
82
+ args := argsI .(* customDeleteACLRequest )
83
+
84
+ request := args .DeleteInstanceACLRulesRequest
85
+ for _ , ip := range args .Rules {
86
+ request .ACLRuleIPs = append (request .ACLRuleIPs , ip .IP )
87
+ }
88
+
89
+ aclDeleteResponseI , err := runner (ctx , request )
35
90
if err != nil {
36
91
return nil , err
37
92
}
93
+
38
94
aclDeleteResponse := aclDeleteResponseI .(* rdb.DeleteInstanceACLRulesResponse )
39
95
return rdb.ListInstanceACLRulesResponse {
40
96
Rules : aclDeleteResponse .Rules ,
41
97
TotalCount : uint32 (len (aclDeleteResponse .Rules )),
42
98
}, nil
43
99
}
44
100
101
+ c .WaitFunc = func (ctx context.Context , argsI , respI interface {}) (interface {}, error ) {
102
+ args := argsI .(* customDeleteACLRequest )
103
+
104
+ api := rdb .NewAPI (core .ExtractClient (ctx ))
105
+ _ , err := api .WaitForInstance (& rdb.WaitForInstanceRequest {
106
+ InstanceID : args .InstanceID ,
107
+ Region : args .Region ,
108
+ Timeout : scw .TimeDurationPtr (instanceActionTimeout ),
109
+ RetryInterval : core .DefaultRetryInterval ,
110
+ })
111
+ if err != nil {
112
+ return nil , err
113
+ }
114
+
115
+ return respI .(rdb.ListInstanceACLRulesResponse ), nil
116
+ }
117
+
45
118
return c
46
119
}
0 commit comments