|
1 | 1 | /*
|
2 | 2 | Provide a resource to create security group some lite rules quickly.
|
3 | 3 |
|
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. |
5 | 5 |
|
6 | 6 | Example Usage
|
7 | 7 |
|
@@ -113,7 +113,7 @@ func resourceTencentCloudSecurityGroupLiteRuleCreate(d *schema.ResourceData, m i
|
113 | 113 | }
|
114 | 114 | }
|
115 | 115 |
|
116 |
| - if err := service.AttachLiteRulesToSecurityGroup(ctx, sgId, ingress, egress); err != nil { |
| 116 | + if err := service.AttachLiteRulesToSecurityGroup(ctx, sgId, ingress, egress, updateLiteRule, updateLiteRule); err != nil { |
117 | 117 | return err
|
118 | 118 | }
|
119 | 119 |
|
@@ -170,34 +170,74 @@ func resourceTencentCloudSecurityGroupLiteRuleUpdate(d *schema.ResourceData, m i
|
170 | 170 | service := VpcService{client: m.(*TencentCloudClient).apiV3Conn}
|
171 | 171 |
|
172 | 172 | var (
|
173 |
| - ingress []VpcSecurityGroupLiteRule |
174 |
| - egress []VpcSecurityGroupLiteRule |
| 173 | + ingress []VpcSecurityGroupLiteRule |
| 174 | + egress []VpcSecurityGroupLiteRule |
| 175 | + updateIngressKind = noModifyLiteRule |
| 176 | + updateEgressKind = noModifyLiteRule |
175 | 177 | )
|
176 | 178 |
|
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) |
183 | 202 | }
|
184 |
| - ingress = append(ingress, liteRule) |
185 | 203 | }
|
186 | 204 | }
|
187 | 205 |
|
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) |
194 | 229 | }
|
195 |
| - egress = append(egress, liteRule) |
196 | 230 | }
|
197 | 231 | }
|
198 | 232 |
|
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 | + } |
201 | 241 | }
|
202 | 242 |
|
203 | 243 | return resourceTencentCloudSecurityGroupLiteRuleRead(d, m)
|
|
0 commit comments