From 2a48e20b22ff7d56e0e9be280d2efd5839722eeb Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Mon, 21 Apr 2025 15:05:14 +0800 Subject: [PATCH 1/2] add --- .../resource_tc_tdmq_rabbitmq_vip_instance.go | 84 +++++++++++++++---- .../resource_tc_tdmq_rabbitmq_vip_instance.md | 6 ++ .../tdmq_rabbitmq_vip_instance.html.markdown | 7 ++ 3 files changed, 81 insertions(+), 16 deletions(-) diff --git a/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.go b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.go index 639ad8d5c0..2532e636a6 100644 --- a/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.go +++ b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.go @@ -2,6 +2,7 @@ package trabbit import ( tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" "context" @@ -88,6 +89,11 @@ func ResourceTencentCloudTdmqRabbitmqVipInstance() *schema.Resource { Computed: true, Description: "Cluster version, the default is `3.8.30`, valid values: `3.8.30` and `3.11.8`.", }, + "tags": { + Type: schema.TypeMap, + Optional: true, + Description: "Tag description list.", + }, "public_access_endpoint": { Type: schema.TypeString, Computed: true, @@ -199,6 +205,10 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceCreate(d *schema.ResourceData, m 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 { + return resource.NonRetryableError(fmt.Errorf("Create tdmq rabbitmqVipInstance failed, Response is nil.")) + } + response = result return nil }) @@ -208,6 +218,10 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceCreate(d *schema.ResourceData, m return err } + if response.Response.InstanceId == nil { + return fmt.Errorf("InstanceId is nil.") + } + instanceId = *response.Response.InstanceId // wait @@ -248,6 +262,15 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceCreate(d *schema.ResourceData, m d.SetId(instanceId) + if tags := helper.GetTags(d, "tags"); len(tags) > 0 { + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := fmt.Sprintf("qcs::tdmq:%s:uin/:cluster/%s", region, d.Id()) + if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { + return err + } + } + return resourceTencentCloudTdmqRabbitmqVipInstanceRead(d, meta) } @@ -361,6 +384,15 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceRead(d *schema.ResourceData, met return nil } + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + tags, err := tagService.DescribeResourceTags(ctx, "tdmq", "cluster", tcClient.Region, d.Id()) + if err != nil { + return err + } + + _ = d.Set("tags", tags) + return nil } @@ -386,28 +418,39 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceUpdate(d *schema.ResourceData, m } } - request.InstanceId = &instanceId - if d.HasChange("cluster_name") { if v, ok := d.GetOk("cluster_name"); ok { request.ClusterName = helper.String(v.(string)) } - } - err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyRabbitMQVipInstance(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()) - } + request.InstanceId = &instanceId + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyRabbitMQVipInstance(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 - }) + return nil + }) - if err != nil { - log.Printf("[CRITAL]%s update tdmq rabbitmqVipInstance failed, reason:%+v", logId, err) - return err + if err != nil { + log.Printf("[CRITAL]%s update tdmq rabbitmqVipInstance failed, reason:%+v", logId, err) + return err + } + } + + if d.HasChange("tags") { + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + oldTags, newTags := d.GetChange("tags") + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("tdmq", "cluster", tcClient.Region, d.Id()) + if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { + return err + } } return resourceTencentCloudTdmqRabbitmqVipInstanceRead(d, meta) @@ -424,7 +467,16 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceDelete(d *schema.ResourceData, m instanceId = d.Id() ) - if err := service.DeleteTdmqRabbitmqVipInstanceById(ctx, instanceId); err != nil { + err := resource.Retry(tccommon.WaitReadTimeout, func() *resource.RetryError { + e := service.DeleteTdmqRabbitmqVipInstanceById(ctx, instanceId) + if e != nil { + return tccommon.RetryError(e) + } + + return nil + }) + + if err != nil { return err } diff --git a/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.md b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.md index f14fa42797..e191c5971e 100644 --- a/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.md +++ b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.md @@ -34,6 +34,9 @@ resource "tencentcloud_tdmq_rabbitmq_vip_instance" "example" { enable_create_default_ha_mirror_queue = false auto_renew_flag = true time_span = 1 + tags = { + createBy = "Terraform" + } } # create postpaid rabbitmq instance @@ -50,6 +53,9 @@ resource "tencentcloud_tdmq_rabbitmq_vip_instance" "example2" { time_span = 1 pay_mode = 0 cluster_version = "3.11.8" + tags = { + createBy = "Terraform1" + } } ``` diff --git a/website/docs/r/tdmq_rabbitmq_vip_instance.html.markdown b/website/docs/r/tdmq_rabbitmq_vip_instance.html.markdown index 7143d26e0a..7bb2a1c36e 100644 --- a/website/docs/r/tdmq_rabbitmq_vip_instance.html.markdown +++ b/website/docs/r/tdmq_rabbitmq_vip_instance.html.markdown @@ -45,6 +45,9 @@ resource "tencentcloud_tdmq_rabbitmq_vip_instance" "example" { enable_create_default_ha_mirror_queue = false auto_renew_flag = true time_span = 1 + tags = { + createBy = "Terraform" + } } # create postpaid rabbitmq instance @@ -61,6 +64,9 @@ resource "tencentcloud_tdmq_rabbitmq_vip_instance" "example2" { time_span = 1 pay_mode = 0 cluster_version = "3.11.8" + tags = { + createBy = "Terraform1" + } } ``` @@ -79,6 +85,7 @@ The following arguments are supported: * `node_spec` - (Optional, String) Node specifications. Valid values: rabbit-vip-basic-5 (for 2C4G), rabbit-vip-profession-2c8g (for 2C8G), rabbit-vip-basic-1 (for 4C8G), rabbit-vip-profession-4c16g (for 4C16G), rabbit-vip-basic-2 (for 8C16G), rabbit-vip-profession-8c32g (for 8C32G), rabbit-vip-basic-4 (for 16C32G), rabbit-vip-profession-16c64g (for 16C64G). The default is rabbit-vip-basic-1. NOTE: The above specifications may be sold out or removed from the shelves. * `pay_mode` - (Optional, Int) Payment method: 0 indicates postpaid; 1 indicates prepaid. Default: prepaid. * `storage_size` - (Optional, Int) Single node storage specification, the default is 200G. +* `tags` - (Optional, Map) Tag description list. * `time_span` - (Optional, Int) Purchase duration, the default is 1 (month). ## Attributes Reference From 81f3b87af192a040b37e3c840d99ece6577b4318 Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Mon, 21 Apr 2025 15:06:54 +0800 Subject: [PATCH 2/2] add --- .changelog/3319.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/3319.txt diff --git a/.changelog/3319.txt b/.changelog/3319.txt new file mode 100644 index 0000000000..1b755e5d60 --- /dev/null +++ b/.changelog/3319.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_tdmq_rabbitmq_vip_instance: support `tags` +``` \ No newline at end of file