Skip to content

Commit 21462e1

Browse files
committed
refactor: refine tencentcloud_security_group_lite_rule
tencentcloud_security_group_lite_rule refine update process and doc
1 parent af2e54b commit 21462e1

File tree

5 files changed

+266
-72
lines changed

5 files changed

+266
-72
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ ENHANCEMENTS:
44

55
* Resource: `tencentcloud_gaap_http_rule` argument `realservers` now is optional.
66
* Resource: `tencentcloud_kubernetes_cluster` supports multiple `availability_zone`.
7-
7+
* Resource: `tencentcloud_security_group_lite_rule` refine update process and doc.
88

99
## 1.39.0 (July 18, 2020)
1010

tencentcloud/resource_tc_security_group_lite_rule.go

Lines changed: 60 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
Provide a resource to create security group some lite rules quickly.
33
4-
-> **NOTE:** It can't be used with tencentcloud_security_group_rule.
4+
-> **NOTE:** It can't be used with tencentcloud_security_group_rule, and don't create multi tencentcloud_security_group_rule resources, otherwise it may cause problems.
55
66
Example Usage
77
@@ -113,7 +113,7 @@ func resourceTencentCloudSecurityGroupLiteRuleCreate(d *schema.ResourceData, m i
113113
}
114114
}
115115

116-
if err := service.AttachLiteRulesToSecurityGroup(ctx, sgId, ingress, egress); err != nil {
116+
if err := service.AttachLiteRulesToSecurityGroup(ctx, sgId, ingress, egress, updateLiteRule, updateLiteRule); err != nil {
117117
return err
118118
}
119119

@@ -170,34 +170,74 @@ func resourceTencentCloudSecurityGroupLiteRuleUpdate(d *schema.ResourceData, m i
170170
service := VpcService{client: m.(*TencentCloudClient).apiV3Conn}
171171

172172
var (
173-
ingress []VpcSecurityGroupLiteRule
174-
egress []VpcSecurityGroupLiteRule
173+
ingress []VpcSecurityGroupLiteRule
174+
egress []VpcSecurityGroupLiteRule
175+
updateIngressKind = noModifyLiteRule
176+
updateEgressKind = noModifyLiteRule
175177
)
176178

177-
if raw, ok := d.GetOk("ingress"); ok {
178-
ingressStrs := helper.InterfacesStrings(raw.([]interface{}))
179-
for _, ingressStr := range ingressStrs {
180-
liteRule, err := parseRule(ingressStr)
181-
if err != nil {
182-
return err
179+
if d.HasChange("ingress") {
180+
if raw, ok := d.GetOk("ingress"); ok {
181+
updateIngressKind = updateLiteRule
182+
183+
ingressStrs := helper.InterfacesStrings(raw.([]interface{}))
184+
for _, ingressStr := range ingressStrs {
185+
liteRule, err := parseRule(ingressStr)
186+
if err != nil {
187+
return err
188+
}
189+
ingress = append(ingress, liteRule)
190+
}
191+
} else {
192+
updateIngressKind = deleteLiteRule
193+
194+
old, _ := d.GetChange("ingress")
195+
ingressStrs := helper.InterfacesStrings(old.([]interface{}))
196+
for _, ingressStr := range ingressStrs {
197+
liteRule, err := parseRule(ingressStr)
198+
if err != nil {
199+
return err
200+
}
201+
ingress = append(ingress, liteRule)
183202
}
184-
ingress = append(ingress, liteRule)
185203
}
186204
}
187205

188-
if raw, ok := d.GetOk("egress"); ok {
189-
egressStrs := helper.InterfacesStrings(raw.([]interface{}))
190-
for _, egressStr := range egressStrs {
191-
liteRule, err := parseRule(egressStr)
192-
if err != nil {
193-
return err
206+
if d.HasChange("egress") {
207+
if raw, ok := d.GetOk("egress"); ok {
208+
updateEgressKind = updateLiteRule
209+
210+
egressStrs := helper.InterfacesStrings(raw.([]interface{}))
211+
for _, egressStr := range egressStrs {
212+
liteRule, err := parseRule(egressStr)
213+
if err != nil {
214+
return err
215+
}
216+
egress = append(egress, liteRule)
217+
}
218+
} else {
219+
updateEgressKind = deleteLiteRule
220+
221+
old, _ := d.GetChange("egress")
222+
egressStrs := helper.InterfacesStrings(old.([]interface{}))
223+
for _, egressStr := range egressStrs {
224+
liteRule, err := parseRule(egressStr)
225+
if err != nil {
226+
return err
227+
}
228+
egress = append(egress, liteRule)
194229
}
195-
egress = append(egress, liteRule)
196230
}
197231
}
198232

199-
if err := service.AttachLiteRulesToSecurityGroup(ctx, id, ingress, egress); err != nil {
200-
return err
233+
if updateIngressKind == deleteLiteRule && updateEgressKind == deleteLiteRule {
234+
if err := service.DetachAllLiteRulesFromSecurityGroup(ctx, id); err != nil {
235+
return err
236+
}
237+
} else {
238+
if err := service.modifyLiteRulesInSecurityGroup(ctx, id, ingress, egress, updateIngressKind, updateEgressKind); err != nil {
239+
return err
240+
}
201241
}
202242

203243
return resourceTencentCloudSecurityGroupLiteRuleRead(d, m)

tencentcloud/resource_tc_security_group_lite_rule_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import (
1111
)
1212

1313
func TestAccTencentCloudSecurityGroupLiteRule_basic(t *testing.T) {
14+
t.Parallel()
15+
1416
var liteRuleId string
1517

1618
resource.Test(t, resource.TestCase{
@@ -41,6 +43,8 @@ func TestAccTencentCloudSecurityGroupLiteRule_basic(t *testing.T) {
4143
}
4244

4345
func TestAccTencentCloudSecurityGroupLiteRule_update(t *testing.T) {
46+
t.Parallel()
47+
4448
var liteRuleId string
4549

4650
resource.Test(t, resource.TestCase{

0 commit comments

Comments
 (0)