From 3b4cce75a015abaa8289c07ad53d31bf7930401b Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Fri, 21 Mar 2025 19:43:56 +0800 Subject: [PATCH 1/2] add --- .../teo/resource_tc_teo_l7_acc_rule.go | 164 +++++++++++++++--- .../teo/resource_tc_teo_l7_acc_rule.md | 44 +++-- website/docs/r/teo_l7_acc_rule.html.markdown | 45 +++-- 3 files changed, 203 insertions(+), 50 deletions(-) diff --git a/tencentcloud/services/teo/resource_tc_teo_l7_acc_rule.go b/tencentcloud/services/teo/resource_tc_teo_l7_acc_rule.go index 7b31497981..2f2953dad2 100644 --- a/tencentcloud/services/teo/resource_tc_teo_l7_acc_rule.go +++ b/tencentcloud/services/teo/resource_tc_teo_l7_acc_rule.go @@ -1,4 +1,3 @@ -// Code generated by iacg; DO NOT EDIT. package teo import ( @@ -233,24 +232,104 @@ func resourceTencentCloudTeoL7AccRuleUpdate(d *schema.ResourceData, meta interfa } if needChange { - if v, ok := d.GetOk("rules"); ok { - for _, item := range v.([]interface{}) { - request := teov20220901.NewModifyL7AccRuleRequest() + oldRules, newRules := d.GetChange("rules") + oldRulesList := oldRules.([]interface{}) + newRulesList := newRules.([]interface{}) + lenOldRules := len(oldRulesList) + lenNewRules := len(newRulesList) + if lenOldRules >= lenNewRules { + needDelIds := make([]*string, 0, lenOldRules) + for i := 0; i < lenOldRules; i++ { + oldRulesMap := oldRulesList[i].(map[string]interface{}) + ruleEngineItem := teov20220901.RuleEngineItem{} + // update + if i < lenNewRules { + rulesMap := newRulesList[i].(map[string]interface{}) + request := teov20220901.NewModifyL7AccRuleRequest() + request.ZoneId = helper.String(zoneId) + if v, ok := rulesMap["status"].(string); ok && v != "" { + ruleEngineItem.Status = helper.String(v) + } + + if v, ok := rulesMap["rule_name"].(string); ok && v != "" { + ruleEngineItem.RuleName = helper.String(v) + } + + if v, ok := rulesMap["description"]; ok { + descriptionSet := v.([]interface{}) + for i := range descriptionSet { + description := descriptionSet[i].(string) + ruleEngineItem.Description = append(ruleEngineItem.Description, helper.String(description)) + } + } + + if _, ok := rulesMap["branches"]; ok { + ruleEngineItem.Branches = resourceTencentCloudTeoL7AccRuleGetBranchs(rulesMap) + } + + if v, ok := oldRulesMap["rule_id"].(string); ok && v != "" { + ruleEngineItem.RuleId = helper.String(v) + } + + request.Rule = &ruleEngineItem + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoV20220901Client().ModifyL7AccRuleWithContext(ctx, request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + + if reqErr != nil { + log.Printf("[CRITAL]%s update teo l7 acc rule failed, reason:%+v", logId, reqErr) + return reqErr + } + } else { + if v, ok := oldRulesMap["rule_id"].(string); ok && v != "" { + needDelIds = append(needDelIds, helper.String(v)) + } + } + } + + // delete + if len(needDelIds) == 0 { + return resourceTencentCloudTeoL7AccRuleRead(d, meta) + } - if v, ok := d.GetOk("zone_id"); ok { - request.ZoneId = helper.String(v.(string)) + request := teov20220901.NewDeleteL7AccRulesRequest() + request.ZoneId = helper.String(zoneId) + request.RuleIds = needDelIds + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoV20220901Client().DeleteL7AccRulesWithContext(ctx, request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } - rulesMap := item.(map[string]interface{}) + + return nil + }) + + if reqErr != nil { + log.Printf("[CRITAL]%s delete teo l7 acc rule failed, reason:%+v", logId, reqErr) + return reqErr + } + } else { + needAddRules := make([]*teov20220901.RuleEngineItem, 0, len(newRulesList)) + for i := 0; i < lenNewRules; i++ { + rulesMap := newRulesList[i].(map[string]interface{}) ruleEngineItem := teov20220901.RuleEngineItem{} + // update if v, ok := rulesMap["status"].(string); ok && v != "" { ruleEngineItem.Status = helper.String(v) } - if v, ok := rulesMap["rule_id"].(string); ok && v != "" { - ruleEngineItem.RuleId = helper.String(v) - } + if v, ok := rulesMap["rule_name"].(string); ok && v != "" { ruleEngineItem.RuleName = helper.String(v) } + if v, ok := rulesMap["description"]; ok { descriptionSet := v.([]interface{}) for i := range descriptionSet { @@ -258,28 +337,61 @@ func resourceTencentCloudTeoL7AccRuleUpdate(d *schema.ResourceData, meta interfa ruleEngineItem.Description = append(ruleEngineItem.Description, helper.String(description)) } } - // if v, ok := rulesMap["rule_priority"].(int); ok { - // ruleEngineItem.RulePriority = helper.IntInt64(v) - // } if _, ok := rulesMap["branches"]; ok { ruleEngineItem.Branches = resourceTencentCloudTeoL7AccRuleGetBranchs(rulesMap) } - request.Rule = &ruleEngineItem - - reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoV20220901Client().ModifyL7AccRuleWithContext(ctx, request) - if e != nil { - return tccommon.RetryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + + if i < lenOldRules { + oldRulesMap := oldRulesList[i].(map[string]interface{}) + if v, ok := oldRulesMap["rule_id"].(string); ok && v != "" { + ruleEngineItem.RuleId = helper.String(v) } - return nil - }) - if reqErr != nil { - log.Printf("[CRITAL]%s update teo l7 acc rule failed, reason:%+v", logId, reqErr) - return reqErr + + request := teov20220901.NewModifyL7AccRuleRequest() + request.ZoneId = helper.String(zoneId) + request.Rule = &ruleEngineItem + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoV20220901Client().ModifyL7AccRuleWithContext(ctx, request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + + if reqErr != nil { + log.Printf("[CRITAL]%s update teo l7 acc rule failed, reason:%+v", logId, reqErr) + return reqErr + } + } else { + needAddRules = append(needAddRules, &ruleEngineItem) + } + } + + // add + if len(needAddRules) == 0 { + return resourceTencentCloudTeoL7AccRuleRead(d, meta) + } + + request := teov20220901.NewCreateL7AccRulesRequest() + request.ZoneId = helper.String(zoneId) + request.Rules = needAddRules + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoV20220901Client().CreateL7AccRulesWithContext(ctx, request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } + + return nil + }) + + if reqErr != nil { + log.Printf("[CRITAL]%s create teo l7 acc rule failed, reason:%+v", logId, reqErr) + return reqErr } } } diff --git a/tencentcloud/services/teo/resource_tc_teo_l7_acc_rule.md b/tencentcloud/services/teo/resource_tc_teo_l7_acc_rule.md index 27781c6277..ae01113fb9 100644 --- a/tencentcloud/services/teo/resource_tc_teo_l7_acc_rule.md +++ b/tencentcloud/services/teo/resource_tc_teo_l7_acc_rule.md @@ -1,16 +1,16 @@ -Provides a resource to create a teo l7_acc_rule +Provides a resource to create a teo l7 acc rule Example Usage ```hcl -resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { - zone_id = "zone-36bjhygh1bxe" +resource "tencentcloud_teo_l7_acc_rule" "example" { + zone_id = "zone-39i4o8t86pvu" rules { description = ["1"] rule_name = "网站加速" status = "disable" branches { - condition = "$${http.request.host} in ['aaa.makn.cn']" + condition = "$${http.request.host} in ['demo.example.com']" actions { name = "Cache" cache_parameters { @@ -21,6 +21,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + actions { name = "CacheKey" cache_key_parameters { @@ -34,6 +35,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + sub_rules { description = ["1-1"] branches { @@ -48,6 +50,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + sub_rules { description = ["1-2"] branches { @@ -63,12 +66,13 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + rules { description = ["2"] rule_name = "音视频直播" status = "enable" branches { - condition = "$${http.request.host} in ['aaa.makn.cn']" + condition = "$${http.request.host} in ['demo.example.com']" sub_rules { description = ["2-1"] branches { @@ -84,6 +88,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + branches { condition = "$${http.request.file_extension} in ['ts', 'mp4', 'm4a', 'm4s']" actions { @@ -97,6 +102,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + branches { condition = "*" actions { @@ -114,12 +120,13 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + rules { description = ["3"] rule_name = "大文件下载" status = "enable" branches { - condition = "$${http.request.host} in ['aaa.makn.cn']" + condition = "$${http.request.host} in ['demo.example.com']" actions { name = "Cache" cache_parameters { @@ -130,6 +137,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + actions { name = "CacheKey" cache_key_parameters { @@ -143,12 +151,14 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + actions { name = "RangeOriginPull" range_origin_pull_parameters { switch = "on" } } + sub_rules { description = ["3-1"] branches { @@ -165,12 +175,13 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + rules { description = ["4"] rule_name = "音视频点播" status = "enable" branches { - condition = "$${http.request.host} in ['aaa.makn.cn']" + condition = "$${http.request.host} in ['demo.example.com']" actions { name = "Cache" cache_parameters { @@ -181,6 +192,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + actions { name = "CacheKey" cache_key_parameters { @@ -194,12 +206,14 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + actions { name = "RangeOriginPull" range_origin_pull_parameters { switch = "on" } } + sub_rules { description = ["4-1"] branches { @@ -216,12 +230,13 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + rules { description = ["5"] rule_name = "API 加速" status = "enable" branches { - condition = "$${http.request.host} in ['aaa.makn.cn']" + condition = "$${http.request.host} in ['demo.example.com']" actions { name = "Cache" cache_parameters { @@ -230,6 +245,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + actions { name = "SmartRouting" smart_routing_parameters { @@ -238,12 +254,13 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + rules { description = ["6"] rule_name = "WordPress 建站" status = "enable" branches { - condition = "$${http.request.host} in ['aaa.makn.cn']" + condition = "$${http.request.host} in ['demo.example.com']" sub_rules { description = ["6-1"] branches { @@ -259,6 +276,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + branches { condition = "$${http.request.uri.path} in ['/']" actions { @@ -270,6 +288,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + branches { condition = "$${http.request.file_extension} in ['aspx', 'jsp', 'php', 'asp', 'do', 'dwr', 'cgi', 'fcgi', 'action', 'ashx', 'axd']" actions { @@ -281,6 +300,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + branches { condition = "$${http.request.uri.path} in ['/wp-admin/']" actions { @@ -292,6 +312,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + branches { condition = "*" actions { @@ -310,11 +331,10 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } - ``` Import -teo l7_acc_rule can be imported using the zone_id, e.g. +teo l7 acc rule can be imported using the zone_id, e.g. ```` -terraform import tencentcloud_teo_l7_acc_rule.teo_l7_acc_rule zone-297z8rf93cfw +terraform import tencentcloud_teo_l7_acc_rule.example zone-297z8rf93cfw ```` \ No newline at end of file diff --git a/website/docs/r/teo_l7_acc_rule.html.markdown b/website/docs/r/teo_l7_acc_rule.html.markdown index bdc311d9a6..26982ee606 100644 --- a/website/docs/r/teo_l7_acc_rule.html.markdown +++ b/website/docs/r/teo_l7_acc_rule.html.markdown @@ -4,24 +4,24 @@ layout: "tencentcloud" page_title: "TencentCloud: tencentcloud_teo_l7_acc_rule" sidebar_current: "docs-tencentcloud-resource-teo_l7_acc_rule" description: |- - Provides a resource to create a teo l7_acc_rule + Provides a resource to create a teo l7 acc rule --- # tencentcloud_teo_l7_acc_rule -Provides a resource to create a teo l7_acc_rule +Provides a resource to create a teo l7 acc rule ## Example Usage ```hcl -resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { - zone_id = "zone-36bjhygh1bxe" +resource "tencentcloud_teo_l7_acc_rule" "example" { + zone_id = "zone-39i4o8t86pvu" rules { description = ["1"] rule_name = "网站加速" status = "disable" branches { - condition = "$${http.request.host} in ['aaa.makn.cn']" + condition = "$${http.request.host} in ['demo.example.com']" actions { name = "Cache" cache_parameters { @@ -32,6 +32,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + actions { name = "CacheKey" cache_key_parameters { @@ -45,6 +46,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + sub_rules { description = ["1-1"] branches { @@ -59,6 +61,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + sub_rules { description = ["1-2"] branches { @@ -74,12 +77,13 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + rules { description = ["2"] rule_name = "音视频直播" status = "enable" branches { - condition = "$${http.request.host} in ['aaa.makn.cn']" + condition = "$${http.request.host} in ['demo.example.com']" sub_rules { description = ["2-1"] branches { @@ -95,6 +99,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + branches { condition = "$${http.request.file_extension} in ['ts', 'mp4', 'm4a', 'm4s']" actions { @@ -108,6 +113,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + branches { condition = "*" actions { @@ -125,12 +131,13 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + rules { description = ["3"] rule_name = "大文件下载" status = "enable" branches { - condition = "$${http.request.host} in ['aaa.makn.cn']" + condition = "$${http.request.host} in ['demo.example.com']" actions { name = "Cache" cache_parameters { @@ -141,6 +148,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + actions { name = "CacheKey" cache_key_parameters { @@ -154,12 +162,14 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + actions { name = "RangeOriginPull" range_origin_pull_parameters { switch = "on" } } + sub_rules { description = ["3-1"] branches { @@ -176,12 +186,13 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + rules { description = ["4"] rule_name = "音视频点播" status = "enable" branches { - condition = "$${http.request.host} in ['aaa.makn.cn']" + condition = "$${http.request.host} in ['demo.example.com']" actions { name = "Cache" cache_parameters { @@ -192,6 +203,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + actions { name = "CacheKey" cache_key_parameters { @@ -205,12 +217,14 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + actions { name = "RangeOriginPull" range_origin_pull_parameters { switch = "on" } } + sub_rules { description = ["4-1"] branches { @@ -227,12 +241,13 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + rules { description = ["5"] rule_name = "API 加速" status = "enable" branches { - condition = "$${http.request.host} in ['aaa.makn.cn']" + condition = "$${http.request.host} in ['demo.example.com']" actions { name = "Cache" cache_parameters { @@ -241,6 +256,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + actions { name = "SmartRouting" smart_routing_parameters { @@ -249,12 +265,13 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + rules { description = ["6"] rule_name = "WordPress 建站" status = "enable" branches { - condition = "$${http.request.host} in ['aaa.makn.cn']" + condition = "$${http.request.host} in ['demo.example.com']" sub_rules { description = ["6-1"] branches { @@ -270,6 +287,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + branches { condition = "$${http.request.uri.path} in ['/']" actions { @@ -281,6 +299,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + branches { condition = "$${http.request.file_extension} in ['aspx', 'jsp', 'php', 'asp', 'do', 'dwr', 'cgi', 'fcgi', 'action', 'ashx', 'axd']" actions { @@ -292,6 +311,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + branches { condition = "$${http.request.uri.path} in ['/wp-admin/']" actions { @@ -303,6 +323,7 @@ resource "tencentcloud_teo_l7_acc_rule" "teo_l7_acc_rule" { } } } + branches { condition = "*" actions { @@ -716,8 +737,8 @@ In addition to all arguments above, the following attributes are exported: ## Import -teo l7_acc_rule can be imported using the zone_id, e.g. +teo l7 acc rule can be imported using the zone_id, e.g. ```` -terraform import tencentcloud_teo_l7_acc_rule.teo_l7_acc_rule zone-297z8rf93cfw +terraform import tencentcloud_teo_l7_acc_rule.example zone-297z8rf93cfw ```` From 207a000e0eba9922ecf161e6d0f336b5d3ee25be Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Fri, 21 Mar 2025 19:46:21 +0800 Subject: [PATCH 2/2] add --- .changelog/3234.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/3234.txt diff --git a/.changelog/3234.txt b/.changelog/3234.txt new file mode 100644 index 0000000000..349426682f --- /dev/null +++ b/.changelog/3234.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_teo_l7_acc_rule: optimize update module code +``` \ No newline at end of file