Skip to content

Commit 3b4cce7

Browse files
committed
add
1 parent 05cf3e2 commit 3b4cce7

File tree

3 files changed

+203
-50
lines changed

3 files changed

+203
-50
lines changed

tencentcloud/services/teo/resource_tc_teo_l7_acc_rule.go

Lines changed: 138 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// Code generated by iacg; DO NOT EDIT.
21
package teo
32

43
import (
@@ -233,53 +232,166 @@ func resourceTencentCloudTeoL7AccRuleUpdate(d *schema.ResourceData, meta interfa
233232
}
234233

235234
if needChange {
236-
if v, ok := d.GetOk("rules"); ok {
237-
for _, item := range v.([]interface{}) {
238-
request := teov20220901.NewModifyL7AccRuleRequest()
235+
oldRules, newRules := d.GetChange("rules")
236+
oldRulesList := oldRules.([]interface{})
237+
newRulesList := newRules.([]interface{})
238+
lenOldRules := len(oldRulesList)
239+
lenNewRules := len(newRulesList)
240+
if lenOldRules >= lenNewRules {
241+
needDelIds := make([]*string, 0, lenOldRules)
242+
for i := 0; i < lenOldRules; i++ {
243+
oldRulesMap := oldRulesList[i].(map[string]interface{})
244+
ruleEngineItem := teov20220901.RuleEngineItem{}
245+
// update
246+
if i < lenNewRules {
247+
rulesMap := newRulesList[i].(map[string]interface{})
248+
request := teov20220901.NewModifyL7AccRuleRequest()
249+
request.ZoneId = helper.String(zoneId)
250+
if v, ok := rulesMap["status"].(string); ok && v != "" {
251+
ruleEngineItem.Status = helper.String(v)
252+
}
253+
254+
if v, ok := rulesMap["rule_name"].(string); ok && v != "" {
255+
ruleEngineItem.RuleName = helper.String(v)
256+
}
257+
258+
if v, ok := rulesMap["description"]; ok {
259+
descriptionSet := v.([]interface{})
260+
for i := range descriptionSet {
261+
description := descriptionSet[i].(string)
262+
ruleEngineItem.Description = append(ruleEngineItem.Description, helper.String(description))
263+
}
264+
}
265+
266+
if _, ok := rulesMap["branches"]; ok {
267+
ruleEngineItem.Branches = resourceTencentCloudTeoL7AccRuleGetBranchs(rulesMap)
268+
}
269+
270+
if v, ok := oldRulesMap["rule_id"].(string); ok && v != "" {
271+
ruleEngineItem.RuleId = helper.String(v)
272+
}
273+
274+
request.Rule = &ruleEngineItem
275+
reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
276+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoV20220901Client().ModifyL7AccRuleWithContext(ctx, request)
277+
if e != nil {
278+
return tccommon.RetryError(e)
279+
} else {
280+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
281+
}
282+
return nil
283+
})
284+
285+
if reqErr != nil {
286+
log.Printf("[CRITAL]%s update teo l7 acc rule failed, reason:%+v", logId, reqErr)
287+
return reqErr
288+
}
289+
} else {
290+
if v, ok := oldRulesMap["rule_id"].(string); ok && v != "" {
291+
needDelIds = append(needDelIds, helper.String(v))
292+
}
293+
}
294+
}
295+
296+
// delete
297+
if len(needDelIds) == 0 {
298+
return resourceTencentCloudTeoL7AccRuleRead(d, meta)
299+
}
239300

240-
if v, ok := d.GetOk("zone_id"); ok {
241-
request.ZoneId = helper.String(v.(string))
301+
request := teov20220901.NewDeleteL7AccRulesRequest()
302+
request.ZoneId = helper.String(zoneId)
303+
request.RuleIds = needDelIds
304+
reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
305+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoV20220901Client().DeleteL7AccRulesWithContext(ctx, request)
306+
if e != nil {
307+
return tccommon.RetryError(e)
308+
} else {
309+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
242310
}
243-
rulesMap := item.(map[string]interface{})
311+
312+
return nil
313+
})
314+
315+
if reqErr != nil {
316+
log.Printf("[CRITAL]%s delete teo l7 acc rule failed, reason:%+v", logId, reqErr)
317+
return reqErr
318+
}
319+
} else {
320+
needAddRules := make([]*teov20220901.RuleEngineItem, 0, len(newRulesList))
321+
for i := 0; i < lenNewRules; i++ {
322+
rulesMap := newRulesList[i].(map[string]interface{})
244323
ruleEngineItem := teov20220901.RuleEngineItem{}
324+
// update
245325
if v, ok := rulesMap["status"].(string); ok && v != "" {
246326
ruleEngineItem.Status = helper.String(v)
247327
}
248-
if v, ok := rulesMap["rule_id"].(string); ok && v != "" {
249-
ruleEngineItem.RuleId = helper.String(v)
250-
}
328+
251329
if v, ok := rulesMap["rule_name"].(string); ok && v != "" {
252330
ruleEngineItem.RuleName = helper.String(v)
253331
}
332+
254333
if v, ok := rulesMap["description"]; ok {
255334
descriptionSet := v.([]interface{})
256335
for i := range descriptionSet {
257336
description := descriptionSet[i].(string)
258337
ruleEngineItem.Description = append(ruleEngineItem.Description, helper.String(description))
259338
}
260339
}
261-
// if v, ok := rulesMap["rule_priority"].(int); ok {
262-
// ruleEngineItem.RulePriority = helper.IntInt64(v)
263-
// }
264340

265341
if _, ok := rulesMap["branches"]; ok {
266342
ruleEngineItem.Branches = resourceTencentCloudTeoL7AccRuleGetBranchs(rulesMap)
267343
}
268-
request.Rule = &ruleEngineItem
269-
270-
reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
271-
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoV20220901Client().ModifyL7AccRuleWithContext(ctx, request)
272-
if e != nil {
273-
return tccommon.RetryError(e)
274-
} else {
275-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
344+
345+
if i < lenOldRules {
346+
oldRulesMap := oldRulesList[i].(map[string]interface{})
347+
if v, ok := oldRulesMap["rule_id"].(string); ok && v != "" {
348+
ruleEngineItem.RuleId = helper.String(v)
276349
}
277-
return nil
278-
})
279-
if reqErr != nil {
280-
log.Printf("[CRITAL]%s update teo l7 acc rule failed, reason:%+v", logId, reqErr)
281-
return reqErr
350+
351+
request := teov20220901.NewModifyL7AccRuleRequest()
352+
request.ZoneId = helper.String(zoneId)
353+
request.Rule = &ruleEngineItem
354+
reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
355+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoV20220901Client().ModifyL7AccRuleWithContext(ctx, request)
356+
if e != nil {
357+
return tccommon.RetryError(e)
358+
} else {
359+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
360+
}
361+
return nil
362+
})
363+
364+
if reqErr != nil {
365+
log.Printf("[CRITAL]%s update teo l7 acc rule failed, reason:%+v", logId, reqErr)
366+
return reqErr
367+
}
368+
} else {
369+
needAddRules = append(needAddRules, &ruleEngineItem)
370+
}
371+
}
372+
373+
// add
374+
if len(needAddRules) == 0 {
375+
return resourceTencentCloudTeoL7AccRuleRead(d, meta)
376+
}
377+
378+
request := teov20220901.NewCreateL7AccRulesRequest()
379+
request.ZoneId = helper.String(zoneId)
380+
request.Rules = needAddRules
381+
reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
382+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoV20220901Client().CreateL7AccRulesWithContext(ctx, request)
383+
if e != nil {
384+
return tccommon.RetryError(e)
385+
} else {
386+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
282387
}
388+
389+
return nil
390+
})
391+
392+
if reqErr != nil {
393+
log.Printf("[CRITAL]%s create teo l7 acc rule failed, reason:%+v", logId, reqErr)
394+
return reqErr
283395
}
284396
}
285397
}

0 commit comments

Comments
 (0)