Skip to content

fix(clb): [137085113] tencentcloud_clb_log_set support new params #3086

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

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
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/3086.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
resource/tencentcloud_clb_log_set: support new params
```
143 changes: 102 additions & 41 deletions tencentcloud/services/clb/resource_tc_clb_log_set.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@ package clb
import (
"context"
"fmt"
"time"
"log"

"github.com/pkg/errors"
clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317"
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
svccls "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls"

"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

Expand All @@ -22,6 +25,20 @@ func ResourceTencentCloudClbLogSet() *schema.Resource {
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"logset_name": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
Description: "Logset name, which must be unique among all CLS logsets; default value: clb_logset.",
},
"logset_type": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
Description: "Logset type. Valid values: ACCESS (access logs; default value) and HEALTH (health check logs).",
},
"period": {
Type: schema.TypeInt,
Optional: true,
Expand All @@ -31,6 +48,7 @@ func ResourceTencentCloudClbLogSet() *schema.Resource {
"name": {
Type: schema.TypeString,
Computed: true,
Deprecated: "It has been deprecated from version 1.81.162+. Please use `logset_name` instead.",
Description: "Logset name, which unique and fixed `clb_logset` among all CLS logsets.",
},
"create_time": {
Expand All @@ -47,76 +65,119 @@ func ResourceTencentCloudClbLogSet() *schema.Resource {
}
}

func resourceTencentCloudClbLogSetRead(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_clb_logset.read")()
defer tccommon.InconsistentCheck(d, meta)()
func resourceTencentCloudClbLogSetCreate(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_clb_log_set.create")()
defer clbActionMu.Unlock()
clbActionMu.Lock()

logId := tccommon.GetLogId(tccommon.ContextNil)
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
service := svccls.NewClsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn())
var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
service = ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
)

id := d.Id()
_, _, err := service.DescribeClbLogSet(ctx)
if err != nil {
return err
}

info, err := service.DescribeClsLogset(ctx, id)
request := clb.NewCreateClsLogSetRequest()
response := clb.NewCreateClsLogSetResponse()
if v, ok := d.GetOk("logset_name"); ok {
request.LogsetName = helper.String(v.(string))
}

if v, ok := d.GetOk("logset_type"); ok {
request.LogsetType = helper.String(v.(string))
}

if v, ok := d.GetOkExists("period"); ok {
request.Period = helper.IntUint64(v.(int))
}

err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().CreateClsLogSet(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("Create cls logset 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 {
return err
}

if info == nil {
d.SetId("")
return fmt.Errorf("resource `Logset` %s does not exist", id)
if response.Response.LogsetId == nil {
return fmt.Errorf("LogsetId is nil.")
}

_ = d.Set("name", info.LogsetName)
d.SetId(*response.Response.LogsetId)

_ = d.Set("create_time", info.CreateTime)
_ = d.Set("topic_count", helper.Int64ToStr(*info.TopicCount))

return nil
return resourceTencentCloudClbLogSetRead(d, meta)
}

func resourceTencentCloudClbLogSetCreate(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_clb_logset.create")()
defer clbActionMu.Unlock()
clbActionMu.Lock()
func resourceTencentCloudClbLogSetRead(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_clb_log_set.read")()
defer tccommon.InconsistentCheck(d, meta)()

logId := tccommon.GetLogId(tccommon.ContextNil)
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
service = svccls.NewClsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn())
id = d.Id()
)

_, _, err := service.DescribeClbLogSet(ctx)
info, err := service.DescribeClsLogset(ctx, id)
if err != nil {
return err
}

var (
period = d.Get("period").(int)
)
if info == nil {
d.SetId("")
return fmt.Errorf("resource `Logset` %s does not exist", id)
}

// We're not support specify name and health logs for now
id, err := service.CreateClbLogSet(ctx, "clb_logset", "", period)
if info.LogsetName != nil {
_ = d.Set("logset_name", info.LogsetName)
_ = d.Set("name", info.LogsetName)
}

if err != nil {
return err
if info.CreateTime != nil {
_ = d.Set("create_time", info.CreateTime)
}
//加一个创建保护
time.Sleep(3 * time.Second)
d.SetId(id)

return resourceTencentCloudClbLogSetRead(d, meta)
if info.TopicCount != nil {
_ = d.Set("topic_count", helper.Int64ToStrPoint(*info.TopicCount))
}

return nil
}

func resourceTencentCloudClbLogSetDelete(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_clb_logset.delete")()
defer tccommon.LogElapsed("resource.tencentcloud_clb_log_set.delete")()

clbActionMu.Lock()
defer clbActionMu.Unlock()

logId := tccommon.GetLogId(tccommon.ContextNil)
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
service := svccls.NewClsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn())
id := d.Id()
var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
service = svccls.NewClsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn())
id = d.Id()
)

if err := service.DeleteClsLogsetById(ctx, id); err != nil {
return err
Expand Down
8 changes: 5 additions & 3 deletions tencentcloud/services/clb/resource_tc_clb_log_set.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ Provides a resource to create an exclusive CLB Logset.
Example Usage

```hcl
resource "tencentcloud_clb_log_set" "foo" {
period = 7
resource "tencentcloud_clb_log_set" "example" {
logset_name = "tf-example"
logset_type = "ACCESS"
period = 7
}
```

Expand All @@ -13,5 +15,5 @@ Import
CLB log set can be imported using the id, e.g.

```
$ terraform import tencentcloud_clb_logset.foo 4eb9e3a8-9c42-4b32-9ddf-e215e9c92764
$ terraform import tencentcloud_clb_logset.example.example 4eb9e3a8-9c42-4b32-9ddf-e215e9c92764
```
23 changes: 0 additions & 23 deletions tencentcloud/services/clb/service_tencentcloud_clb.go
Original file line number Diff line number Diff line change
Expand Up @@ -1659,29 +1659,6 @@ func (me *ClbService) DescribeClbLogSet(ctx context.Context) (logSetId string, h
return
}

func (me *ClbService) CreateClbLogSet(ctx context.Context, name string, logsetType string, period int) (id string, errRet error) {
logId := tccommon.GetLogId(ctx)
request := clb.NewCreateClsLogSetRequest()
request.Period = helper.IntUint64(period)
request.LogsetName = &name
if logsetType != "" {
request.LogsetType = &logsetType
}
ratelimit.Check(request.GetAction())
response, err := me.client.UseClbClient().CreateClsLogSet(request)
if err != nil {
errRet = err
return
}
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())

if response.Response != nil {
id = *response.Response.LogsetId
}
return
}

func (me *ClbService) UpdateClsLogSet(ctx context.Context, request *cls.ModifyLogsetRequest) (errRet error) {
logId := tccommon.GetLogId(ctx)

Expand Down
12 changes: 8 additions & 4 deletions website/docs/r/clb_log_set.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,19 @@ Provides a resource to create an exclusive CLB Logset.
## Example Usage

```hcl
resource "tencentcloud_clb_log_set" "foo" {
period = 7
resource "tencentcloud_clb_log_set" "example" {
logset_name = "tf-example"
logset_type = "ACCESS"
period = 7
}
```

## Argument Reference

The following arguments are supported:

* `logset_name` - (Optional, String, ForceNew) Logset name, which must be unique among all CLS logsets; default value: clb_logset.
* `logset_type` - (Optional, String, ForceNew) Logset type. Valid values: ACCESS (access logs; default value) and HEALTH (health check logs).
* `period` - (Optional, Int, ForceNew) Logset retention period in days. Maximun value is `90`.

## Attributes Reference
Expand All @@ -31,7 +35,7 @@ In addition to all arguments above, the following attributes are exported:

* `id` - ID of the resource.
* `create_time` - Logset creation time.
* `name` - Logset name, which unique and fixed `clb_logset` among all CLS logsets.
* `name` - (**Deprecated**) It has been deprecated from version 1.81.162+. Please use `logset_name` instead. Logset name, which unique and fixed `clb_logset` among all CLS logsets.
* `topic_count` - Number of log topics in logset.


Expand All @@ -40,6 +44,6 @@ In addition to all arguments above, the following attributes are exported:
CLB log set can be imported using the id, e.g.

```
$ terraform import tencentcloud_clb_logset.foo 4eb9e3a8-9c42-4b32-9ddf-e215e9c92764
$ terraform import tencentcloud_clb_logset.example.example 4eb9e3a8-9c42-4b32-9ddf-e215e9c92764
```

Loading