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
177214func 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 }
0 commit comments