Skip to content

Commit 01104ee

Browse files
authored
fix: UpdateSecurityGroupRule can now remove DestPortFrom and DestPortTo (#179)
1 parent baafd7b commit 01104ee

File tree

3 files changed

+292
-78
lines changed

3 files changed

+292
-78
lines changed

api/instance/v1/security_group_utils.go

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,19 @@ type UpdateSecurityGroupRuleRequest struct {
9797
SecurityGroupID string `json:"-"`
9898
SecurityGroupRuleID string `json:"-"`
9999

100-
Protocol *SecurityGroupRuleProtocol `json:"protocol,omitempty"`
101-
Direction *SecurityGroupRuleDirection `json:"direction,omitempty"`
102-
Action *SecurityGroupRuleAction `json:"action,omitempty"`
103-
IPRange *string `json:"ip_range,omitempty"`
104-
DestPortFrom *uint32 `json:"dest_port_from,omitempty"`
105-
DestPortTo *uint32 `json:"dest_port_to,omitempty"`
106-
Position *uint32 `json:"position,omitempty"`
100+
Protocol *SecurityGroupRuleProtocol `json:"protocol"`
101+
Direction *SecurityGroupRuleDirection `json:"direction"`
102+
Action *SecurityGroupRuleAction `json:"action"`
103+
IPRange *string `json:"ip_range"`
104+
Position *uint32 `json:"position"`
105+
106+
// If set to 0, DestPortFrom will be removed.
107+
// See SecurityGroupRule.DestPortFrom for more information
108+
DestPortFrom *uint32 `json:"dest_port_from"`
109+
110+
// If set to 0, DestPortTo will be removed.
111+
// See SecurityGroupRule.DestPortTo for more information
112+
DestPortTo *uint32 `json:"dest_port_to"`
107113
}
108114

109115
type UpdateSecurityGroupRuleResponse struct {
@@ -155,10 +161,18 @@ func (s *API) UpdateSecurityGroupRule(req *UpdateSecurityGroupRuleRequest, opts
155161
setRequest.IPRange = *req.IPRange
156162
}
157163
if req.DestPortTo != nil {
158-
setRequest.DestPortTo = req.DestPortTo
164+
if *req.DestPortTo > 0 {
165+
setRequest.DestPortTo = req.DestPortTo
166+
} else {
167+
setRequest.DestPortTo = nil
168+
}
159169
}
160170
if req.DestPortFrom != nil {
161-
setRequest.DestPortFrom = req.DestPortFrom
171+
if *req.DestPortFrom > 0 {
172+
setRequest.DestPortFrom = req.DestPortFrom
173+
} else {
174+
setRequest.DestPortFrom = nil
175+
}
162176
}
163177
if req.DestPortFrom != nil && req.DestPortTo != nil && *req.DestPortFrom == *req.DestPortTo {
164178
setRequest.DestPortTo = nil

api/instance/v1/security_group_utils_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,4 +194,25 @@ func TestAPI_UpdateSecurityGroupRule(t *testing.T) {
194194
testhelpers.Equals(t, SecurityGroupRuleDirectionInbound, updateResponse.Rule.Direction)
195195
})
196196

197+
t.Run("Remove ports", func(t *testing.T) {
198+
group, rule, cleanUp := bootstrap(t)
199+
defer cleanUp()
200+
201+
updateResponse, err := instanceAPI.UpdateSecurityGroupRule(&UpdateSecurityGroupRuleRequest{
202+
Zone: zone,
203+
SecurityGroupID: group.ID,
204+
SecurityGroupRuleID: rule.ID,
205+
DestPortFrom: scw.Uint32Ptr(0),
206+
DestPortTo: scw.Uint32Ptr(0),
207+
})
208+
209+
testhelpers.AssertNoError(t, err)
210+
testhelpers.Equals(t, SecurityGroupRuleActionAccept, updateResponse.Rule.Action)
211+
testhelpers.Equals(t, "8.8.8.8", updateResponse.Rule.IPRange)
212+
testhelpers.Equals(t, (*uint32)(nil), updateResponse.Rule.DestPortFrom)
213+
testhelpers.Equals(t, (*uint32)(nil), updateResponse.Rule.DestPortTo)
214+
testhelpers.Equals(t, SecurityGroupRuleProtocolTCP, updateResponse.Rule.Protocol)
215+
testhelpers.Equals(t, SecurityGroupRuleDirectionInbound, updateResponse.Rule.Direction)
216+
})
217+
197218
}

0 commit comments

Comments
 (0)