Skip to content

fix(clb): [137133785] tencentcloud_clb_customized_config update code #3085

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 20, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .changelog/3085.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
resource/tencentcloud_clb_customized_config: update code
```
139 changes: 79 additions & 60 deletions tencentcloud/services/clb/resource_tc_clb_customized_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package clb

import (
"context"
"fmt"
"log"

tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
Expand Down Expand Up @@ -58,79 +59,92 @@ 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)
}

func resourceTencentCloudClbCustomizedConfigRead(d *schema.ResourceData, meta interface{}) error {
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
Expand All @@ -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
Expand All @@ -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
Expand Down
22 changes: 17 additions & 5 deletions tencentcloud/services/clb/resource_tc_clb_customized_config.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
```
21 changes: 16 additions & 5 deletions website/docs/r/clb_customized_config.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -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",
]
}
```
Expand All @@ -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
```

Loading