Skip to content

Commit d4d74db

Browse files
authored
fix(trocket): [126590662] tencentcloud_trocket_rocketmq_topic and tencentcloud_trocket_rocketmq_consumer_group support tags (#3481)
* add * add
1 parent 077036e commit d4d74db

8 files changed

+247
-73
lines changed

.changelog/3481.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_trocket_rocketmq_topic: support `tags`
3+
```
4+
5+
```release-note:enhancement
6+
resource/tencentcloud_trocket_rocketmq_consumer_group: support `tags`
7+
```

tencentcloud/services/trocket/resource_tc_trocket_rocketmq_consumer_group.go

Lines changed: 75 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"strings"
88

99
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
10+
svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag"
1011

1112
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1213
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -62,6 +63,13 @@ func ResourceTencentCloudTrocketRocketmqConsumerGroup() *schema.Resource {
6263
Type: schema.TypeString,
6364
Description: "remark.",
6465
},
66+
67+
"tags": {
68+
Type: schema.TypeMap,
69+
Optional: true,
70+
Computed: true,
71+
Description: "Tag of consumer group.",
72+
},
6573
},
6674
}
6775
}
@@ -70,14 +78,15 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupCreate(d *schema.ResourceDa
7078
defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_consumer_group.create")()
7179
defer tccommon.InconsistentCheck(d, meta)()
7280

73-
logId := tccommon.GetLogId(tccommon.ContextNil)
74-
7581
var (
82+
logId = tccommon.GetLogId(tccommon.ContextNil)
83+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
7684
request = trocket.NewCreateConsumerGroupRequest()
7785
response = trocket.NewCreateConsumerGroupResponse()
7886
instanceId string
7987
consumerGroup string
8088
)
89+
8190
if v, ok := d.GetOk("instance_id"); ok {
8291
request.InstanceId = helper.String(v.(string))
8392
}
@@ -109,17 +118,36 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupCreate(d *schema.ResourceDa
109118
} else {
110119
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
111120
}
121+
122+
if result == nil || result.Response == nil {
123+
return resource.NonRetryableError(fmt.Errorf("Create trocket rocketmq consumer group failed, Response is nil."))
124+
}
125+
112126
response = result
113127
return nil
114128
})
129+
115130
if err != nil {
116-
log.Printf("[CRITAL]%s create trocket rocketmqConsumerGroup failed, reason:%+v", logId, err)
131+
log.Printf("[CRITAL]%s create trocket rocketmq consumer group failed, reason:%+v", logId, err)
117132
return err
118133
}
119134

135+
if response.Response.InstanceId == nil || response.Response.ConsumerGroup == nil {
136+
return fmt.Errorf("InstanceId or ConsumerGroup is nil.")
137+
}
138+
120139
instanceId = *response.Response.InstanceId
121140
consumerGroup = *response.Response.ConsumerGroup
122-
d.SetId(instanceId + tccommon.FILED_SP + consumerGroup)
141+
d.SetId(strings.Join([]string{instanceId, consumerGroup}, tccommon.FILED_SP))
142+
143+
if tags := helper.GetTags(d, "tags"); len(tags) > 0 {
144+
tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn())
145+
region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region
146+
resourceName := fmt.Sprintf("qcs::trocket:%s:uin/:consumerGroup/%s/%s", region, instanceId, consumerGroup)
147+
if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil {
148+
return err
149+
}
150+
}
123151

124152
return resourceTencentCloudTrocketRocketmqConsumerGroupRead(d, meta)
125153
}
@@ -128,11 +156,11 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupRead(d *schema.ResourceData
128156
defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_consumer_group.read")()
129157
defer tccommon.InconsistentCheck(d, meta)()
130158

131-
logId := tccommon.GetLogId(tccommon.ContextNil)
132-
133-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
134-
135-
service := TrocketService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
159+
var (
160+
logId = tccommon.GetLogId(tccommon.ContextNil)
161+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
162+
service = TrocketService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
163+
)
136164

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

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

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

202+
tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn()
203+
tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn())
204+
tags, err := tagService.DescribeResourceTags(ctx, "trocket", "consumerGroup", tcClient.Region, fmt.Sprintf("%s/%s", instanceId, consumerGroup))
205+
if err != nil {
206+
return err
207+
}
208+
209+
_ = d.Set("tags", tags)
210+
174211
return nil
175212
}
176213

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

181-
logId := tccommon.GetLogId(tccommon.ContextNil)
182-
183-
request := trocket.NewModifyConsumerGroupRequest()
218+
var (
219+
logId = tccommon.GetLogId(tccommon.ContextNil)
220+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
221+
request = trocket.NewModifyConsumerGroupRequest()
222+
needChange bool
223+
)
184224

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

192-
request.InstanceId = &instanceId
193-
request.ConsumerGroup = &consumerGroup
194-
195-
needChange := false
196-
197232
mutableArgs := []string{"max_retry_times", "consume_enable", "consume_message_orderly", "remark"}
198-
199233
for _, v := range mutableArgs {
200234
if d.HasChange(v) {
201235
needChange = true
@@ -219,17 +253,32 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupUpdate(d *schema.ResourceDa
219253
request.Remark = helper.String(v.(string))
220254
}
221255

256+
request.InstanceId = &instanceId
257+
request.ConsumerGroup = &consumerGroup
222258
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
223259
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTrocketClient().ModifyConsumerGroup(request)
224260
if e != nil {
225261
return tccommon.RetryError(e)
226262
} else {
227263
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
228264
}
265+
229266
return nil
230267
})
268+
231269
if err != nil {
232-
log.Printf("[CRITAL]%s update trocket rocketmqConsumerGroup failed, reason:%+v", logId, err)
270+
log.Printf("[CRITAL]%s update trocket rocketmq consumer group failed, reason:%+v", logId, err)
271+
return err
272+
}
273+
}
274+
275+
if d.HasChange("tags") {
276+
tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn()
277+
tagService := svctag.NewTagService(tcClient)
278+
oldTags, newTags := d.GetChange("tags")
279+
replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{}))
280+
resourceName := tccommon.BuildTagResourceName("trocket", "consumerGroup", tcClient.Region, fmt.Sprintf("%s/%s", instanceId, consumerGroup))
281+
if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil {
233282
return err
234283
}
235284
}
@@ -241,17 +290,19 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupDelete(d *schema.ResourceDa
241290
defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_consumer_group.delete")()
242291
defer tccommon.InconsistentCheck(d, meta)()
243292

244-
logId := tccommon.GetLogId(tccommon.ContextNil)
245-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
293+
var (
294+
logId = tccommon.GetLogId(tccommon.ContextNil)
295+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
296+
service = TrocketService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
297+
)
246298

247-
service := TrocketService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
248299
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
249300
if len(idSplit) != 2 {
250301
return fmt.Errorf("id is broken,%s", d.Id())
251302
}
303+
252304
instanceId := idSplit[0]
253305
consumerGroup := idSplit[1]
254-
255306
if err := service.DeleteTrocketRocketmqConsumerGroupById(ctx, instanceId, consumerGroup); err != nil {
256307
return err
257308
}
Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,59 @@
1-
Provides a resource to create a trocket rocketmq_consumer_group
1+
Provides a resource to create a TROCKET rocketmq consumer group
22

33
Example Usage
44

55
```hcl
6-
resource "tencentcloud_trocket_rocketmq_instance" "rocketmq_instance" {
7-
instance_type = "EXPERIMENT"
8-
name = "test"
9-
sku_code = "experiment_500"
10-
remark = "test"
11-
vpc_id = "vpc-xxxxxx"
12-
subnet_id = "subnet-xxxxx"
13-
tags = {
14-
tag_key = "rocketmq"
15-
tag_value = "5.x"
6+
variable "availability_zone" {
7+
default = "ap-guangzhou-6"
8+
}
9+
10+
// create vpc
11+
resource "tencentcloud_vpc" "vpc" {
12+
cidr_block = "10.0.0.0/16"
13+
name = "vpc"
14+
}
15+
16+
// create subnet
17+
resource "tencentcloud_subnet" "subnet" {
18+
vpc_id = tencentcloud_vpc.vpc.id
19+
availability_zone = var.availability_zone
20+
name = "subnet"
21+
cidr_block = "10.0.1.0/24"
22+
is_multicast = false
23+
}
24+
25+
// create rocketmq instance
26+
resource "tencentcloud_trocket_rocketmq_instance" "example" {
27+
name = "tf-example"
28+
instance_type = "BASIC"
29+
sku_code = "basic_2k"
30+
remark = "remark."
31+
vpc_id = tencentcloud_vpc.vpc.id
32+
subnet_id = tencentcloud_subnet.subnet.id
33+
tags = {
34+
tag_key = "createBy"
35+
tag_value = "Terraform"
1636
}
1737
}
1838
19-
resource "tencentcloud_trocket_rocketmq_consumer_group" "rocketmq_consumer_group" {
20-
instance_id = tencentcloud_trocket_rocketmq_instance.rocketmq_instance.id
21-
consumer_group = "test_consumer_group"
39+
// create consumer group
40+
resource "tencentcloud_trocket_rocketmq_consumer_group" "example" {
41+
instance_id = tencentcloud_trocket_rocketmq_instance.example.id
42+
consumer_group = "tf-example"
2243
max_retry_times = 20
2344
consume_enable = false
2445
consume_message_orderly = true
25-
remark = "test for terraform"
46+
remark = "remark."
47+
tags = {
48+
createBy = "Terraform"
49+
}
2650
}
2751
```
2852

2953
Import
3054

31-
trocket rocketmq_consumer_group can be imported using the id, e.g.
55+
TROCKET rocketmq consumer group can be imported using the id, e.g.
3256

3357
```
34-
terraform import tencentcloud_trocket_rocketmq_consumer_group.rocketmq_consumer_group instanceId#consumerGroup
35-
```
58+
terraform import tencentcloud_trocket_rocketmq_consumer_group.example rmq-1n58qbwg3#tf-example
59+
```

0 commit comments

Comments
 (0)