diff --git a/.changelog/3086.txt b/.changelog/3086.txt new file mode 100644 index 0000000000..ad71b758c0 --- /dev/null +++ b/.changelog/3086.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_clb_log_set: support new params +``` diff --git a/tencentcloud/services/clb/resource_tc_clb_log_set.go b/tencentcloud/services/clb/resource_tc_clb_log_set.go index 9c7aba4e7d..a06c7096a0 100644 --- a/tencentcloud/services/clb/resource_tc_clb_log_set.go +++ b/tencentcloud/services/clb/resource_tc_clb_log_set.go @@ -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" ) @@ -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, @@ -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": { @@ -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 diff --git a/tencentcloud/services/clb/resource_tc_clb_log_set.md b/tencentcloud/services/clb/resource_tc_clb_log_set.md index 765010d14c..849a873c6a 100644 --- a/tencentcloud/services/clb/resource_tc_clb_log_set.md +++ b/tencentcloud/services/clb/resource_tc_clb_log_set.md @@ -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 } ``` @@ -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 ``` \ No newline at end of file diff --git a/tencentcloud/services/clb/service_tencentcloud_clb.go b/tencentcloud/services/clb/service_tencentcloud_clb.go index f260ea5f75..f05f54a3f6 100644 --- a/tencentcloud/services/clb/service_tencentcloud_clb.go +++ b/tencentcloud/services/clb/service_tencentcloud_clb.go @@ -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) diff --git a/website/docs/r/clb_log_set.html.markdown b/website/docs/r/clb_log_set.html.markdown index a57ff66c04..921b2f2362 100644 --- a/website/docs/r/clb_log_set.html.markdown +++ b/website/docs/r/clb_log_set.html.markdown @@ -14,8 +14,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 } ``` @@ -23,6 +25,8 @@ resource "tencentcloud_clb_log_set" "foo" { 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 @@ -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. @@ -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 ```