Skip to content

Commit 85d1407

Browse files
committed
add
1 parent 53f7568 commit 85d1407

File tree

4 files changed

+87
-58
lines changed

4 files changed

+87
-58
lines changed

tencentcloud/services/ckafka/resource_tc_ckafka_user.go

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -57,43 +57,45 @@ func ResourceTencentCloudCkafkaUser() *schema.Resource {
5757
func resourceTencentCloudCkafkaUserCreate(d *schema.ResourceData, meta interface{}) error {
5858
defer tccommon.LogElapsed("resource.tencentcloud_ckafka_user.create")()
5959

60-
logId := tccommon.GetLogId(tccommon.ContextNil)
61-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
60+
var (
61+
logId = tccommon.GetLogId(tccommon.ContextNil)
62+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
63+
ckafkaService = CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
64+
)
6265

6366
instanceId := d.Get("instance_id").(string)
6467
accountName := d.Get("account_name").(string)
6568
password := d.Get("password").(string)
6669

67-
ckafkaService := CkafkaService{
68-
client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(),
69-
}
7070
if err := ckafkaService.CreateUser(ctx, instanceId, accountName, password); err != nil {
7171
return fmt.Errorf("[CRITAL]%s create ckafka user failed, reason:%+v", logId, err)
7272
}
73-
d.SetId(instanceId + tccommon.FILED_SP + accountName)
7473

74+
d.SetId(strings.Join([]string{instanceId, accountName}, tccommon.FILED_SP))
7575
return resourceTencentCloudCkafkaUserRead(d, meta)
7676
}
7777

7878
func resourceTencentCloudCkafkaUserRead(d *schema.ResourceData, meta interface{}) error {
7979
defer tccommon.LogElapsed("resource.tencentcloud_ckafka_user.read")()
8080
defer tccommon.InconsistentCheck(d, meta)()
8181

82-
logId := tccommon.GetLogId(tccommon.ContextNil)
83-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
84-
ckafkaService := CkafkaService{
85-
client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(),
86-
}
82+
var (
83+
logId = tccommon.GetLogId(tccommon.ContextNil)
84+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
85+
ckafkaService = CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
86+
id = d.Id()
87+
)
8788

88-
id := d.Id()
8989
info, has, err := ckafkaService.DescribeUserByUserId(ctx, id)
9090
if err != nil {
9191
return err
9292
}
93+
9394
if !has {
9495
d.SetId("")
9596
return nil
9697
}
98+
9799
items := strings.Split(id, tccommon.FILED_SP)
98100
_ = d.Set("instance_id", items[0])
99101
_ = d.Set("account_name", info.Name)
@@ -106,20 +108,23 @@ func resourceTencentCloudCkafkaUserRead(d *schema.ResourceData, meta interface{}
106108
func resourceTencentCloudCkafkaUserUpdate(d *schema.ResourceData, meta interface{}) error {
107109
defer tccommon.LogElapsed("resource.tencentcloud_ckafka_user.update")()
108110

109-
logId := tccommon.GetLogId(tccommon.ContextNil)
110-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
111-
ckafkaService := CkafkaService{
112-
client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(),
113-
}
111+
var (
112+
logId = tccommon.GetLogId(tccommon.ContextNil)
113+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
114+
ckafkaService = CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
115+
)
114116

115-
instanceId := d.Get("instance_id").(string)
116-
user := d.Get("account_name").(string)
117117
if d.HasChange("password") {
118+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
119+
if len(idSplit) != 2 {
120+
return fmt.Errorf("id is broken, id is %s", d.Id())
121+
}
122+
123+
instanceId, user := idSplit[0], idSplit[1]
118124
old, new := d.GetChange("password")
119125
if err := ckafkaService.ModifyPassword(ctx, instanceId, user, old.(string), new.(string)); err != nil {
120126
return err
121127
}
122-
123128
}
124129

125130
return resourceTencentCloudCkafkaUserRead(d, meta)
@@ -128,14 +133,15 @@ func resourceTencentCloudCkafkaUserUpdate(d *schema.ResourceData, meta interface
128133
func resourceTencentCloudCkafkaUserDelete(d *schema.ResourceData, meta interface{}) error {
129134
defer tccommon.LogElapsed("resource.tencentcloud_ckafka_user.delete")()
130135

131-
logId := tccommon.GetLogId(tccommon.ContextNil)
132-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
133-
ckafkaService := CkafkaService{
134-
client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(),
135-
}
136+
var (
137+
logId = tccommon.GetLogId(tccommon.ContextNil)
138+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
139+
ckafkaService = CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
140+
)
136141

137142
if err := ckafkaService.DeleteUser(ctx, d.Id()); err != nil {
138143
return err
139144
}
145+
140146
return nil
141147
}

tencentcloud/services/ckafka/resource_tc_ckafka_user.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ Example Usage
55
Ckafka User
66

77
```hcl
8-
resource "tencentcloud_ckafka_user" "foo" {
9-
instance_id = "ckafka-f9ife4zz"
10-
account_name = "tf-test"
11-
password = "test1234"
8+
resource "tencentcloud_ckafka_user" "example" {
9+
instance_id = "ckafka-7k5nbnem"
10+
account_name = "tf-example"
11+
password = "Password@123"
1212
}
1313
```
1414

@@ -17,5 +17,5 @@ Import
1717
Ckafka user can be imported using the instance_id#account_name, e.g.
1818

1919
```
20-
$ terraform import tencentcloud_ckafka_user.foo ckafka-f9ife4zz#tf-test
21-
```
20+
$ terraform import tencentcloud_ckafka_user.example ckafka-7k5nbnem#tf-example
21+
```

tencentcloud/services/ckafka/service_tencentcloud_ckafka.go

Lines changed: 45 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -152,49 +152,72 @@ func (me *CkafkaService) OperateStatusCheck(ctx context.Context, result *ckafka.
152152

153153
func (me *CkafkaService) DescribeUserByUserId(ctx context.Context, userId string) (userInfo *ckafka.User, has bool, errRet error) {
154154
logId := tccommon.GetLogId(ctx)
155-
156155
items := strings.Split(userId, tccommon.FILED_SP)
157156
if len(items) != 2 {
158157
errRet = fmt.Errorf("id of resource.tencentcloud_ckafka_user is wrong")
159158
return
160159
}
161-
instanceId, user := items[0], items[1]
162160

161+
instanceId, user := items[0], items[1]
163162
if _, has, _ = me.DescribeInstanceById(ctx, instanceId); !has {
164163
return
165164
}
166165

167166
request := ckafka.NewDescribeUserRequest()
167+
response := ckafka.NewDescribeUserResponse()
168168
request.InstanceId = &instanceId
169169
request.SearchWord = &user
170170

171-
var response *ckafka.DescribeUserResponse
172-
var err error
173-
err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
174-
response, err = me.client.UseCkafkaClient().DescribeUser(request)
171+
var (
172+
userInfoList []*ckafka.User
173+
offset int64 = 0
174+
limit int64 = 100
175+
)
176+
177+
for {
178+
request.Offset = &offset
179+
request.Limit = &limit
180+
181+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
182+
ratelimit.Check(request.GetAction())
183+
result, e := me.client.UseCkafkaClient().DescribeUser(request)
184+
if e != nil {
185+
return tccommon.RetryError(e)
186+
} else {
187+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
188+
}
189+
190+
if result == nil || result.Response == nil {
191+
return resource.NonRetryableError(fmt.Errorf("Describe user failed, Response is nil."))
192+
}
193+
194+
response = result
195+
return nil
196+
})
197+
175198
if err != nil {
176-
return tccommon.RetryError(err)
199+
errRet = fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error())
200+
return
177201
}
178-
return nil
179-
})
180202

181-
if err != nil {
182-
errRet = fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error())
183-
return
203+
if response.Response.Result == nil || response.Response.Result.Users == nil {
204+
break
205+
}
206+
207+
userInfoList = append(userInfoList, response.Response.Result.Users...)
208+
if len(response.Response.Result.Users) < int(limit) {
209+
break
210+
}
211+
212+
offset += limit
184213
}
185214

186-
if response != nil && response.Response != nil && response.Response.Result != nil && response.Response.Result.Users != nil {
187-
if len(response.Response.Result.Users) < 1 {
188-
has = false
189-
return
190-
} else if len(response.Response.Result.Users) > 1 {
191-
errRet = fmt.Errorf("[CRITAL]%s dumplicated users found", logId)
215+
for _, item := range userInfoList {
216+
if *item.Name == user {
217+
userInfo = item
218+
has = true
192219
return
193220
}
194-
195-
userInfo = response.Response.Result.Users[0]
196-
has = true
197-
return
198221
}
199222

200223
return

website/docs/r/ckafka_user.html.markdown

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ Provides a resource to create a Ckafka user.
1616
### Ckafka User
1717

1818
```hcl
19-
resource "tencentcloud_ckafka_user" "foo" {
20-
instance_id = "ckafka-f9ife4zz"
21-
account_name = "tf-test"
22-
password = "test1234"
19+
resource "tencentcloud_ckafka_user" "example" {
20+
instance_id = "ckafka-7k5nbnem"
21+
account_name = "tf-example"
22+
password = "Password@123"
2323
}
2424
```
2525

@@ -45,6 +45,6 @@ In addition to all arguments above, the following attributes are exported:
4545
Ckafka user can be imported using the instance_id#account_name, e.g.
4646

4747
```
48-
$ terraform import tencentcloud_ckafka_user.foo ckafka-f9ife4zz#tf-test
48+
$ terraform import tencentcloud_ckafka_user.example ckafka-7k5nbnem#tf-example
4949
```
5050

0 commit comments

Comments
 (0)