From 737369aeb8637342a2930e57163b4411247d8377 Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Fri, 17 Jan 2025 16:41:19 +0800 Subject: [PATCH 1/2] add --- .../clb/resource_tc_clb_customized_config.go | 139 ++++++++++-------- .../clb/resource_tc_clb_customized_config.md | 22 ++- .../r/clb_customized_config.html.markdown | 21 ++- 3 files changed, 112 insertions(+), 70 deletions(-) diff --git a/tencentcloud/services/clb/resource_tc_clb_customized_config.go b/tencentcloud/services/clb/resource_tc_clb_customized_config.go index 24678610a5..8e4614acf3 100644 --- a/tencentcloud/services/clb/resource_tc_clb_customized_config.go +++ b/tencentcloud/services/clb/resource_tc_clb_customized_config.go @@ -2,6 +2,7 @@ package clb import ( "context" + "fmt" "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" @@ -58,52 +59,62 @@ func ResourceTencentCloudClbCustomizedConfig() *schema.Resource { func resourceTencentCloudClbCustomizedConfigCreate(d *schema.ResourceData, meta interface{}) error { defer tccommon.LogElapsed("resource.tencentcloud_clb_customized_config.create")() - logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + request = clb.NewSetCustomizedConfigForLoadBalancerRequest() + response = clb.NewSetCustomizedConfigForLoadBalancerResponse() + ) configName := d.Get("config_name").(string) configContent := d.Get("config_content").(string) - - request := clb.NewSetCustomizedConfigForLoadBalancerRequest() request.OperationType = helper.String("ADD") request.ConfigName = helper.String(configName) request.ConfigContent = helper.String(configContent) - var response *clb.SetCustomizedConfigForLoadBalancerResponse err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().SetCustomizedConfigForLoadBalancer(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()) + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + if result == nil || result.Response == nil || result.Response.RequestId == nil { + return resource.NonRetryableError(fmt.Errorf("Create CLB Customized Config Failed, Response is nil.")) + } + requestId := *result.Response.RequestId retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return tccommon.RetryError(errors.WithStack(retryErr)) } } + response = result return nil }) + if err != nil { log.Printf("[CRITAL]%s Create CLB Customized Config Failed, reason:%+v", logId, err) return err } + + if response.Response.ConfigId == nil { + return fmt.Errorf("ConfigId is nil.") + } + d.SetId(*response.Response.ConfigId) if v, ok := d.GetOk("load_balancer_ids"); ok { loadBalancerIds := v.(*schema.Set).List() - clbService := ClbService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } - err := clbService.BindOrUnBindCustomizedConfigWithLbId(ctx, - "BIND", *response.Response.ConfigId, loadBalancerIds) + clbService := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := clbService.BindOrUnBindCustomizedConfigWithLbId(ctx, "BIND", *response.Response.ConfigId, loadBalancerIds) if err != nil { log.Printf("[CRITAL]%s Binding LB Customized Config Failed, reason:%+v", logId, err) return err } } + return resourceTencentCloudClbCustomizedConfigRead(d, meta) } @@ -111,26 +122,29 @@ func resourceTencentCloudClbCustomizedConfigRead(d *schema.ResourceData, meta in defer tccommon.LogElapsed("resource.tencentcloud_clb_customized_config.read")() defer tccommon.InconsistentCheck(d, meta)() - logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + clbService = ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + configId = d.Id() + ) - configId := d.Id() - clbService := ClbService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } var config *clb.ConfigListItem err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := clbService.DescribeLbCustomizedConfigById(ctx, configId) if e != nil { return tccommon.RetryError(e) } + config = result return nil }) + if err != nil { log.Printf("[CRITAL]%s read CLB customized config failed, reason:%+v", logId, err) return err } + if config == nil { d.SetId("") return nil @@ -152,13 +166,16 @@ func resourceTencentCloudClbCustomizedConfigRead(d *schema.ResourceData, meta in log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } + response = result return nil }) + if assErr != nil { log.Printf("[CRITAL]%s Describe CLB Customized Config Associate List Failed, reason:%+v", logId, assErr) return err } + _ = d.Set("load_balancer_ids", extractBindClbList(response.Response.BindList)) return nil @@ -167,93 +184,95 @@ func resourceTencentCloudClbCustomizedConfigRead(d *schema.ResourceData, meta in func resourceTencentCloudClbCustomizedConfigUpdate(d *schema.ResourceData, meta interface{}) error { defer tccommon.LogElapsed("resource.tencentcloud_clb_customized_config.update")() - logId := tccommon.GetLogId(tccommon.ContextNil) + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + configId = d.Id() + ) d.Partial(true) - configId := d.Id() - request := clb.NewSetCustomizedConfigForLoadBalancerRequest() - request.UconfigId = &configId - request.OperationType = helper.String("UPDATE") - - if d.HasChange("config_name") { + if d.HasChange("config_name") || d.HasChange("config_content") { + request := clb.NewSetCustomizedConfigForLoadBalancerRequest() + request.UconfigId = &configId + request.OperationType = helper.String("UPDATE") configName := d.Get("config_name").(string) - request.ConfigName = &configName - } - - if d.HasChange("config_content") { configContent := d.Get("config_content").(string) + request.ConfigName = &configName request.ConfigContent = &configContent - } - err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().SetCustomizedConfigForLoadBalancer(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()) - requestId := *result.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) - if retryErr != nil { - return tccommon.RetryError(errors.WithStack(retryErr)) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().SetCustomizedConfigForLoadBalancer(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 result == nil || result.Response == nil || result.Response.RequestId == nil { + return resource.NonRetryableError(fmt.Errorf("Update CLB Customized Config Failed, Response is nil.")) + } + + requestId := *result.Response.RequestId + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) + if retryErr != nil { + return tccommon.RetryError(errors.WithStack(retryErr)) + } } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s Update CLB Customized Config Failed, reason:%+v", logId, err) + return err } - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s Update CLB Customized Config Failed, reason:%+v", logId, err) - return err } if d.HasChange("load_balancer_ids") { ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - clbService := ClbService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + clbService := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} old, new := d.GetChange("load_balancer_ids") olds := old.(*schema.Set) news := new.(*schema.Set) add := news.Difference(olds).List() remove := olds.Difference(news).List() if len(remove) > 0 { - err := clbService.BindOrUnBindCustomizedConfigWithLbId(ctx, - "UNBIND", configId, remove) + err := clbService.BindOrUnBindCustomizedConfigWithLbId(ctx, "UNBIND", configId, remove) if err != nil { log.Printf("[CRITAL]%s UnBinding LB Customized Config Failed, reason:%+v", logId, err) return err } } + if len(add) > 0 { - err := clbService.BindOrUnBindCustomizedConfigWithLbId(ctx, - "BIND", configId, add) + err := clbService.BindOrUnBindCustomizedConfigWithLbId(ctx, "BIND", configId, add) if err != nil { log.Printf("[CRITAL]%s Binding LB Customized Config Failed, reason:%+v", logId, err) return err } } } + return nil } func resourceTencentCloudClbCustomizedConfigDelete(d *schema.ResourceData, meta interface{}) error { defer tccommon.LogElapsed("resource.tencentcloud_clb_customized_config.delete")() - logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - - configId := d.Id() - clbService := ClbService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + clbService = ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + configId = d.Id() + ) err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := clbService.DeleteLbCustomizedConfigById(ctx, configId) if e != nil { return tccommon.RetryError(e) } + return nil }) + if err != nil { log.Printf("[CRITAL]%s delete CLB customized config failed, reason:%+v", logId, err) return err diff --git a/tencentcloud/services/clb/resource_tc_clb_customized_config.md b/tencentcloud/services/clb/resource_tc_clb_customized_config.md index c271c00f3c..ecf498a059 100644 --- a/tencentcloud/services/clb/resource_tc_clb_customized_config.md +++ b/tencentcloud/services/clb/resource_tc_clb_customized_config.md @@ -2,20 +2,32 @@ Provides a resource to create a CLB customized config. Example Usage +Create clb customized config without CLB instance + +```hcl +resource "tencentcloud_clb_customized_config" "example" { + config_name = "tf-example" + config_content = "client_max_body_size 224M;\r\nclient_body_timeout 60s;" +} +``` + +Create clb customized config with CLB instances + ```hcl -resource "tencentcloud_clb_customized_config" "foo" { +resource "tencentcloud_clb_customized_config" "example" { + config_name = "tf-example" config_content = "client_max_body_size 224M;\r\nclient_body_timeout 60s;" - config_name = "helloWorld" load_balancer_ids = [ - "${tencentcloud_clb_instance.internal_clb.id}", - "${tencentcloud_clb_instance.internal_clb2.id}", + "lb-l6cp6jt4", + "lb-muk4zzxi", ] } ``` + Import CLB customized config can be imported using the id, e.g. ``` -$ terraform import tencentcloud_clb_customized_config.foo pz-diowqstq +$ terraform import tencentcloud_clb_customized_config.example pz-diowqstq ``` \ No newline at end of file diff --git a/website/docs/r/clb_customized_config.html.markdown b/website/docs/r/clb_customized_config.html.markdown index 16276a2040..f8292677be 100644 --- a/website/docs/r/clb_customized_config.html.markdown +++ b/website/docs/r/clb_customized_config.html.markdown @@ -13,13 +13,24 @@ Provides a resource to create a CLB customized config. ## Example Usage +### Create clb customized config without CLB instance + +```hcl +resource "tencentcloud_clb_customized_config" "example" { + config_name = "tf-example" + config_content = "client_max_body_size 224M;\r\nclient_body_timeout 60s;" +} +``` + +### Create clb customized config with CLB instances + ```hcl -resource "tencentcloud_clb_customized_config" "foo" { +resource "tencentcloud_clb_customized_config" "example" { + config_name = "tf-example" config_content = "client_max_body_size 224M;\r\nclient_body_timeout 60s;" - config_name = "helloWorld" load_balancer_ids = [ - "${tencentcloud_clb_instance.internal_clb.id}", - "${tencentcloud_clb_instance.internal_clb2.id}", + "lb-l6cp6jt4", + "lb-muk4zzxi", ] } ``` @@ -46,6 +57,6 @@ In addition to all arguments above, the following attributes are exported: CLB customized config can be imported using the id, e.g. ``` -$ terraform import tencentcloud_clb_customized_config.foo pz-diowqstq +$ terraform import tencentcloud_clb_customized_config.example pz-diowqstq ``` From a8cd0a6a77898f822096eaa7c22667f2b679d6ef Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Fri, 17 Jan 2025 16:59:32 +0800 Subject: [PATCH 2/2] add --- .changelog/3085.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/3085.txt diff --git a/.changelog/3085.txt b/.changelog/3085.txt new file mode 100644 index 0000000000..b6c79452e4 --- /dev/null +++ b/.changelog/3085.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_clb_customized_config: update code +```