Skip to content

fix(trocket): [126590662] tencentcloud_trocket_rocketmq_topic and tencentcloud_trocket_rocketmq_consumer_group support tags #3481

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
Aug 19, 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
7 changes: 7 additions & 0 deletions .changelog/3481.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
```release-note:enhancement
resource/tencentcloud_trocket_rocketmq_topic: support `tags`
```

```release-note:enhancement
resource/tencentcloud_trocket_rocketmq_consumer_group: support `tags`
```
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"strings"

tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
Expand Down Expand Up @@ -62,6 +63,13 @@ func ResourceTencentCloudTrocketRocketmqConsumerGroup() *schema.Resource {
Type: schema.TypeString,
Description: "remark.",
},

"tags": {
Type: schema.TypeMap,
Optional: true,
Computed: true,
Description: "Tag of consumer group.",
},
},
}
}
Expand All @@ -70,14 +78,15 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupCreate(d *schema.ResourceDa
defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_consumer_group.create")()
defer tccommon.InconsistentCheck(d, meta)()

logId := tccommon.GetLogId(tccommon.ContextNil)

var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
request = trocket.NewCreateConsumerGroupRequest()
response = trocket.NewCreateConsumerGroupResponse()
instanceId string
consumerGroup string
)

if v, ok := d.GetOk("instance_id"); ok {
request.InstanceId = helper.String(v.(string))
}
Expand Down Expand Up @@ -109,17 +118,36 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupCreate(d *schema.ResourceDa
} 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 {
return resource.NonRetryableError(fmt.Errorf("Create trocket rocketmq consumer group failed, Response is nil."))
}

response = result
return nil
})

if err != nil {
log.Printf("[CRITAL]%s create trocket rocketmqConsumerGroup failed, reason:%+v", logId, err)
log.Printf("[CRITAL]%s create trocket rocketmq consumer group failed, reason:%+v", logId, err)
return err
}

if response.Response.InstanceId == nil || response.Response.ConsumerGroup == nil {
return fmt.Errorf("InstanceId or ConsumerGroup is nil.")
}

instanceId = *response.Response.InstanceId
consumerGroup = *response.Response.ConsumerGroup
d.SetId(instanceId + tccommon.FILED_SP + consumerGroup)
d.SetId(strings.Join([]string{instanceId, consumerGroup}, tccommon.FILED_SP))

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::trocket:%s:uin/:consumerGroup/%s/%s", region, instanceId, consumerGroup)
if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil {
return err
}
}

return resourceTencentCloudTrocketRocketmqConsumerGroupRead(d, meta)
}
Expand All @@ -128,11 +156,11 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupRead(d *schema.ResourceData
defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_consumer_group.read")()
defer tccommon.InconsistentCheck(d, meta)()

logId := tccommon.GetLogId(tccommon.ContextNil)

ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)

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

idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
if len(idSplit) != 2 {
Expand All @@ -147,8 +175,8 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupRead(d *schema.ResourceData
}

if rocketmqConsumerGroup == nil {
log.Printf("[WARN]%s resource `tencentcloud_trocket_rocketmq_consumer_group` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
d.SetId("")
log.Printf("[WARN]%s resource `TrocketRocketmqConsumerGroup` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
return nil
}

Expand All @@ -171,16 +199,28 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupRead(d *schema.ResourceData
_ = d.Set("remark", rocketmqConsumerGroup.Remark)
}

tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn()
tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn())
tags, err := tagService.DescribeResourceTags(ctx, "trocket", "consumerGroup", tcClient.Region, fmt.Sprintf("%s/%s", instanceId, consumerGroup))
if err != nil {
return err
}

_ = d.Set("tags", tags)

return nil
}

func resourceTencentCloudTrocketRocketmqConsumerGroupUpdate(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_consumer_group.update")()
defer tccommon.InconsistentCheck(d, meta)()

logId := tccommon.GetLogId(tccommon.ContextNil)

request := trocket.NewModifyConsumerGroupRequest()
var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
request = trocket.NewModifyConsumerGroupRequest()
needChange bool
)

idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
if len(idSplit) != 2 {
Expand All @@ -189,13 +229,7 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupUpdate(d *schema.ResourceDa
instanceId := idSplit[0]
consumerGroup := idSplit[1]

request.InstanceId = &instanceId
request.ConsumerGroup = &consumerGroup

needChange := false

mutableArgs := []string{"max_retry_times", "consume_enable", "consume_message_orderly", "remark"}

for _, v := range mutableArgs {
if d.HasChange(v) {
needChange = true
Expand All @@ -219,17 +253,32 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupUpdate(d *schema.ResourceDa
request.Remark = helper.String(v.(string))
}

request.InstanceId = &instanceId
request.ConsumerGroup = &consumerGroup
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTrocketClient().ModifyConsumerGroup(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
})

if err != nil {
log.Printf("[CRITAL]%s update trocket rocketmqConsumerGroup failed, reason:%+v", logId, err)
log.Printf("[CRITAL]%s update trocket rocketmq consumer group failed, reason:%+v", logId, err)
return err
}
}

if d.HasChange("tags") {
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("trocket", "consumerGroup", tcClient.Region, fmt.Sprintf("%s/%s", instanceId, consumerGroup))
if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil {
return err
}
}
Expand All @@ -241,17 +290,19 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupDelete(d *schema.ResourceDa
defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_consumer_group.delete")()
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)
service = TrocketService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
)

service := TrocketService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
if len(idSplit) != 2 {
return fmt.Errorf("id is broken,%s", d.Id())
}

instanceId := idSplit[0]
consumerGroup := idSplit[1]

if err := service.DeleteTrocketRocketmqConsumerGroupById(ctx, instanceId, consumerGroup); err != nil {
return err
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,35 +1,59 @@
Provides a resource to create a trocket rocketmq_consumer_group
Provides a resource to create a TROCKET rocketmq consumer group

Example Usage

```hcl
resource "tencentcloud_trocket_rocketmq_instance" "rocketmq_instance" {
instance_type = "EXPERIMENT"
name = "test"
sku_code = "experiment_500"
remark = "test"
vpc_id = "vpc-xxxxxx"
subnet_id = "subnet-xxxxx"
tags = {
tag_key = "rocketmq"
tag_value = "5.x"
variable "availability_zone" {
default = "ap-guangzhou-6"
}

// create vpc
resource "tencentcloud_vpc" "vpc" {
cidr_block = "10.0.0.0/16"
name = "vpc"
}

// create subnet
resource "tencentcloud_subnet" "subnet" {
vpc_id = tencentcloud_vpc.vpc.id
availability_zone = var.availability_zone
name = "subnet"
cidr_block = "10.0.1.0/24"
is_multicast = false
}

// create rocketmq instance
resource "tencentcloud_trocket_rocketmq_instance" "example" {
name = "tf-example"
instance_type = "BASIC"
sku_code = "basic_2k"
remark = "remark."
vpc_id = tencentcloud_vpc.vpc.id
subnet_id = tencentcloud_subnet.subnet.id
tags = {
tag_key = "createBy"
tag_value = "Terraform"
}
}

resource "tencentcloud_trocket_rocketmq_consumer_group" "rocketmq_consumer_group" {
instance_id = tencentcloud_trocket_rocketmq_instance.rocketmq_instance.id
consumer_group = "test_consumer_group"
// create consumer group
resource "tencentcloud_trocket_rocketmq_consumer_group" "example" {
instance_id = tencentcloud_trocket_rocketmq_instance.example.id
consumer_group = "tf-example"
max_retry_times = 20
consume_enable = false
consume_message_orderly = true
remark = "test for terraform"
remark = "remark."
tags = {
createBy = "Terraform"
}
}
```

Import

trocket rocketmq_consumer_group can be imported using the id, e.g.
TROCKET rocketmq consumer group can be imported using the id, e.g.

```
terraform import tencentcloud_trocket_rocketmq_consumer_group.rocketmq_consumer_group instanceId#consumerGroup
```
terraform import tencentcloud_trocket_rocketmq_consumer_group.example rmq-1n58qbwg3#tf-example
```
Loading
Loading