Skip to content

Commit 62d007c

Browse files
authored
add trocket rile (#2153)
* add trocket rile * add changelog * fix lint
1 parent f6e33e2 commit 62d007c

File tree

14 files changed

+1093
-12
lines changed

14 files changed

+1093
-12
lines changed

.changelog/2153.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-resource
2+
tencentcloud_trocket_rocketmq_role
3+
```

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ require (
4242
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.693
4343
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
4444
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.711
45-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.755
45+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.756
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.589
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.692
@@ -88,7 +88,7 @@ require (
8888
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem v1.0.578
8989
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo v1.0.730
9090
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.691
91-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket v1.0.746
91+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket v1.0.756
9292
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.755
9393
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf v1.0.674
9494
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.199

go.sum

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -854,17 +854,16 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.725/go.mod
854854
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.726/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
855855
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.729/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
856856
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.730/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
857-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.732/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
858857
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.734/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
859858
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.736/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
860859
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.745/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
861-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.746/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
862860
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.748/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
863861
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.750/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
864862
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.751/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
865863
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.754/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
866-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.755 h1:mAhmX5bEBbLoLfeQu7y6ygeWFle4Kb4Z5e+sp8QyZcA=
867864
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.755/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
865+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.756 h1:TpeGo45T48N5OJ6LekUdMt3sjYJi4jis4x5jFo8Vz8A=
866+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.756/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
868867
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624 h1:nEZqsoqt1pEoaP9JjkHQy3/H00suCfzlHW1qOm2nYD8=
869868
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624/go.mod h1:+TXSVyeKwt1IhZRqKPbTREteBcP+K07Q846/ilNzLWA=
870869
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.589 h1:LZihgirMH0vsaGScYexxwY0fTss9vHaSZs/YOQUVESg=
@@ -955,10 +954,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo v1.0.730 h1:isKxaxm
955954
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo v1.0.730/go.mod h1:vA9wf067VO5kkEjUgViUw/VA0ALUXE/wbSI1baeuHpI=
956955
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.691 h1:D+a7bZnjLoqPAAHSPCOmil4eigXnGPkR1R5G3ybT/+c=
957956
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.691/go.mod h1:hsc/CPzbCRXqblCYuE1HuvP3G06OWA9zhAGI6AtEe5U=
958-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket v1.0.746 h1:ZHfhs8xTWUtKHwDJQNd8mGzV2hFifwKOWYDJTbPrOSM=
959-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket v1.0.746/go.mod h1:NS1bkjH/+dhwCFvluZd+uq8h8hbnOHJaFDbkQe0YTm4=
960-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.732 h1:hC6bRxIBwjAEnqDsJh8tpY/SqcSfP84exN+cVvHwtd4=
961-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.732/go.mod h1:jF0O9bIPZ/oQ+m3qeEfWHLbtsJFKNaiqvdSNGP7AQCI=
957+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket v1.0.756 h1:89M6uA8Y/FC1b88TFxvRManGW+i62Isqg1lW8HjHDvU=
958+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket v1.0.756/go.mod h1:AJAItBOTaarpDpUF7pNp0tuz2Y6H2oFuMcyKouPs1IE=
962959
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.755 h1:DbYmGORd2zBnry69k6BR9hzEczrOmbNScE92POutYOY=
963960
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.755/go.mod h1:o+ABiUSkJQowYQjJsLBHBJsxy4BosjGVuRAsXas+VlY=
964961
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf v1.0.674 h1:VsMV1/vsgVzespG7jUzraZS/AbAUllVQjmtVAlA9W/M=

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1451,6 +1451,7 @@ TDMQ for RocketMQ(trocket)
14511451
tencentcloud_trocket_rocketmq_instance
14521452
tencentcloud_trocket_rocketmq_topic
14531453
tencentcloud_trocket_rocketmq_consumer_group
1454+
tencentcloud_trocket_rocketmq_role
14541455
14551456
TDMQ for RabbitMQ(trabbit)
14561457
Resource
@@ -2933,6 +2934,7 @@ func Provider() *schema.Provider {
29332934
"tencentcloud_trocket_rocketmq_instance": resourceTencentCloudTrocketRocketmqInstance(),
29342935
"tencentcloud_trocket_rocketmq_topic": resourceTencentCloudTrocketRocketmqTopic(),
29352936
"tencentcloud_trocket_rocketmq_consumer_group": resourceTencentCloudTrocketRocketmqConsumerGroup(),
2937+
"tencentcloud_trocket_rocketmq_role": resourceTencentCloudTrocketRocketmqRole(),
29362938
"tencentcloud_dts_sync_job": resourceTencentCloudDtsSyncJob(),
29372939
"tencentcloud_dts_sync_config": resourceTencentCloudDtsSyncConfig(),
29382940
"tencentcloud_dts_sync_check_job_operation": resourceTencentCloudDtsSyncCheckJobOperation(),
Lines changed: 293 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,293 @@
1+
/*
2+
Provides a resource to create a trocket rocketmq_role
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_trocket_rocketmq_instance" "rocketmq_instance" {
8+
instance_type = "EXPERIMENT"
9+
name = "test_role"
10+
sku_code = "experiment_500"
11+
remark = "test"
12+
vpc_id = "vpc-xxxxx"
13+
subnet_id = "subnet-xxxxx"
14+
tags = {
15+
tag_key = "rocketmq"
16+
tag_value = "5.x"
17+
}
18+
}
19+
20+
resource "tencentcloud_trocket_rocketmq_role" "rocketmq_role" {
21+
instance_id = tencentcloud_trocket_rocketmq_instance.rocketmq_instance.id
22+
role = "test_role"
23+
remark = "test for terraform"
24+
perm_write = false
25+
perm_read = true
26+
}
27+
```
28+
29+
Import
30+
31+
trocket rocketmq_role can be imported using the id, e.g.
32+
33+
```
34+
terraform import tencentcloud_trocket_rocketmq_role.rocketmq_role instanceId#role
35+
```
36+
*/
37+
package tencentcloud
38+
39+
import (
40+
"context"
41+
"fmt"
42+
"log"
43+
"strings"
44+
45+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
46+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
47+
trocket "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket/v20230308"
48+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
49+
)
50+
51+
func resourceTencentCloudTrocketRocketmqRole() *schema.Resource {
52+
return &schema.Resource{
53+
Create: resourceTencentCloudTrocketRocketmqRoleCreate,
54+
Read: resourceTencentCloudTrocketRocketmqRoleRead,
55+
Update: resourceTencentCloudTrocketRocketmqRoleUpdate,
56+
Delete: resourceTencentCloudTrocketRocketmqRoleDelete,
57+
Importer: &schema.ResourceImporter{
58+
State: schema.ImportStatePassthrough,
59+
},
60+
Schema: map[string]*schema.Schema{
61+
"instance_id": {
62+
Required: true,
63+
Type: schema.TypeString,
64+
ForceNew: true,
65+
Description: "ID of instance.",
66+
},
67+
68+
"role": {
69+
Required: true,
70+
Type: schema.TypeString,
71+
ForceNew: true,
72+
Description: "Name of role.",
73+
},
74+
75+
"remark": {
76+
Required: true,
77+
Type: schema.TypeString,
78+
Description: "remark.",
79+
},
80+
81+
"perm_write": {
82+
Required: true,
83+
Type: schema.TypeBool,
84+
Description: "Whether to enable production permission.",
85+
},
86+
87+
"perm_read": {
88+
Required: true,
89+
Type: schema.TypeBool,
90+
Description: "Whether to enable consumption permission.",
91+
},
92+
93+
"created_time": {
94+
Computed: true,
95+
Type: schema.TypeInt,
96+
Description: "Created time.",
97+
},
98+
99+
"modified_time": {
100+
Computed: true,
101+
Type: schema.TypeInt,
102+
Description: "Modified time.",
103+
},
104+
},
105+
}
106+
}
107+
108+
func resourceTencentCloudTrocketRocketmqRoleCreate(d *schema.ResourceData, meta interface{}) error {
109+
defer logElapsed("resource.tencentcloud_trocket_rocketmq_role.create")()
110+
defer inconsistentCheck(d, meta)()
111+
112+
logId := getLogId(contextNil)
113+
114+
var (
115+
request = trocket.NewCreateRoleRequest()
116+
response = trocket.NewCreateRoleResponse()
117+
instanceId string
118+
role string
119+
)
120+
if v, ok := d.GetOk("instance_id"); ok {
121+
instanceId = v.(string)
122+
request.InstanceId = helper.String(v.(string))
123+
}
124+
125+
if v, ok := d.GetOk("role"); ok {
126+
request.Role = helper.String(v.(string))
127+
}
128+
129+
if v, ok := d.GetOk("remark"); ok {
130+
request.Remark = helper.String(v.(string))
131+
}
132+
133+
if v, ok := d.GetOkExists("perm_write"); ok {
134+
request.PermWrite = helper.Bool(v.(bool))
135+
}
136+
137+
if v, ok := d.GetOkExists("perm_read"); ok {
138+
request.PermRead = helper.Bool(v.(bool))
139+
}
140+
141+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
142+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseTrocketClient().CreateRole(request)
143+
if e != nil {
144+
return retryError(e)
145+
} else {
146+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
147+
}
148+
response = result
149+
return nil
150+
})
151+
if err != nil {
152+
log.Printf("[CRITAL]%s create trocket rocketmqRole failed, reason:%+v", logId, err)
153+
return err
154+
}
155+
156+
role = *response.Response.Role
157+
d.SetId(instanceId + FILED_SP + role)
158+
159+
return resourceTencentCloudTrocketRocketmqRoleRead(d, meta)
160+
}
161+
162+
func resourceTencentCloudTrocketRocketmqRoleRead(d *schema.ResourceData, meta interface{}) error {
163+
defer logElapsed("resource.tencentcloud_trocket_rocketmq_role.read")()
164+
defer inconsistentCheck(d, meta)()
165+
166+
logId := getLogId(contextNil)
167+
168+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
169+
170+
service := TrocketService{client: meta.(*TencentCloudClient).apiV3Conn}
171+
172+
idSplit := strings.Split(d.Id(), FILED_SP)
173+
if len(idSplit) != 2 {
174+
return fmt.Errorf("id is broken,%s", d.Id())
175+
}
176+
instanceId := idSplit[0]
177+
role := idSplit[1]
178+
179+
rocketmqRole, err := service.DescribeTrocketRocketmqRoleById(ctx, instanceId, role)
180+
if err != nil {
181+
return err
182+
}
183+
184+
if rocketmqRole == nil {
185+
d.SetId("")
186+
log.Printf("[WARN]%s resource `TrocketRocketmqRole` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
187+
return nil
188+
}
189+
190+
_ = d.Set("instance_id", instanceId)
191+
_ = d.Set("role", role)
192+
193+
if rocketmqRole.Remark != nil {
194+
_ = d.Set("remark", rocketmqRole.Remark)
195+
}
196+
197+
if rocketmqRole.PermWrite != nil {
198+
_ = d.Set("perm_write", rocketmqRole.PermWrite)
199+
}
200+
201+
if rocketmqRole.PermRead != nil {
202+
_ = d.Set("perm_read", rocketmqRole.PermRead)
203+
}
204+
205+
if rocketmqRole.CreatedTime != nil {
206+
_ = d.Set("created_time", rocketmqRole.CreatedTime)
207+
}
208+
209+
if rocketmqRole.ModifiedTime != nil {
210+
_ = d.Set("modified_time", rocketmqRole.ModifiedTime)
211+
}
212+
213+
return nil
214+
}
215+
216+
func resourceTencentCloudTrocketRocketmqRoleUpdate(d *schema.ResourceData, meta interface{}) error {
217+
defer logElapsed("resource.tencentcloud_trocket_rocketmq_role.update")()
218+
defer inconsistentCheck(d, meta)()
219+
220+
logId := getLogId(contextNil)
221+
222+
request := trocket.NewModifyRoleRequest()
223+
224+
idSplit := strings.Split(d.Id(), FILED_SP)
225+
if len(idSplit) != 2 {
226+
return fmt.Errorf("id is broken,%s", d.Id())
227+
}
228+
instanceId := idSplit[0]
229+
role := idSplit[1]
230+
231+
request.InstanceId = &instanceId
232+
request.Role = &role
233+
234+
mutableArgs := []string{"remark", "perm_write", "perm_read"}
235+
needChange := false
236+
237+
for _, v := range mutableArgs {
238+
if d.HasChange(v) {
239+
needChange = true
240+
}
241+
}
242+
243+
if needChange {
244+
if v, ok := d.GetOk("remark"); ok {
245+
request.Remark = helper.String(v.(string))
246+
}
247+
248+
if v, ok := d.GetOkExists("perm_write"); ok {
249+
request.PermWrite = helper.Bool(v.(bool))
250+
}
251+
252+
if v, ok := d.GetOkExists("perm_read"); ok {
253+
request.PermRead = helper.Bool(v.(bool))
254+
}
255+
256+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
257+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseTrocketClient().ModifyRole(request)
258+
if e != nil {
259+
return retryError(e)
260+
} else {
261+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
262+
}
263+
return nil
264+
})
265+
if err != nil {
266+
log.Printf("[CRITAL]%s update trocket rocketmqRole failed, reason:%+v", logId, err)
267+
return err
268+
}
269+
}
270+
return resourceTencentCloudTrocketRocketmqRoleRead(d, meta)
271+
}
272+
273+
func resourceTencentCloudTrocketRocketmqRoleDelete(d *schema.ResourceData, meta interface{}) error {
274+
defer logElapsed("resource.tencentcloud_trocket_rocketmq_role.delete")()
275+
defer inconsistentCheck(d, meta)()
276+
277+
logId := getLogId(contextNil)
278+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
279+
280+
service := TrocketService{client: meta.(*TencentCloudClient).apiV3Conn}
281+
idSplit := strings.Split(d.Id(), FILED_SP)
282+
if len(idSplit) != 2 {
283+
return fmt.Errorf("id is broken,%s", d.Id())
284+
}
285+
instanceId := idSplit[0]
286+
role := idSplit[1]
287+
288+
if err := service.DeleteTrocketRocketmqRoleById(ctx, instanceId, role); err != nil {
289+
return err
290+
}
291+
292+
return nil
293+
}

0 commit comments

Comments
 (0)