Skip to content

Commit 0e57922

Browse files
authored
fix(tco): [126935803] tencentcloud_organization_org_member add new params force_delete_account (#3497)
* add * add
1 parent d2bf420 commit 0e57922

File tree

5 files changed

+227
-141
lines changed

5 files changed

+227
-141
lines changed

.changelog/3497.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_organization_org_member: add new params `force_delete_account`
3+
```

tencentcloud/services/tco/resource_tc_organization_org_member.go

Lines changed: 134 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ import (
1717

1818
func ResourceTencentCloudOrganizationOrgMember() *schema.Resource {
1919
return &schema.Resource{
20-
Read: resourceTencentCloudOrganizationOrgMemberRead,
2120
Create: resourceTencentCloudOrganizationOrgMemberCreate,
21+
Read: resourceTencentCloudOrganizationOrgMemberRead,
2222
Update: resourceTencentCloudOrganizationOrgMemberUpdate,
2323
Delete: resourceTencentCloudOrganizationOrgMemberDelete,
2424
Importer: &schema.ResourceImporter{
@@ -70,6 +70,20 @@ func ResourceTencentCloudOrganizationOrgMember() *schema.Resource {
7070
Description: "The uin which is payment account on behalf.When `PermissionIds` contains 7, is required.",
7171
},
7272

73+
"tags": {
74+
Type: schema.TypeMap,
75+
Optional: true,
76+
Description: "Tag description list.",
77+
},
78+
79+
"force_delete_account": {
80+
Type: schema.TypeBool,
81+
Optional: true,
82+
Default: false,
83+
Description: "Whether to force delete the member account when deleting the organization member. It is only applicable to member accounts of the creation type, not to member accounts of the invitation type. Default is false.",
84+
},
85+
86+
// computed
7387
"node_name": {
7488
Type: schema.TypeString,
7589
Computed: true,
@@ -131,11 +145,6 @@ func ResourceTencentCloudOrganizationOrgMember() *schema.Resource {
131145
Computed: true,
132146
Description: "The member name which is payment account on behalf.",
133147
},
134-
"tags": {
135-
Type: schema.TypeMap,
136-
Optional: true,
137-
Description: "Tag description list.",
138-
},
139148
},
140149
}
141150
}
@@ -144,9 +153,8 @@ func resourceTencentCloudOrganizationOrgMemberCreate(d *schema.ResourceData, met
144153
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member.create")()
145154
defer tccommon.InconsistentCheck(d, meta)()
146155

147-
logId := tccommon.GetLogId(tccommon.ContextNil)
148-
149156
var (
157+
logId = tccommon.GetLogId(tccommon.ContextNil)
150158
request = organization.NewCreateOrganizationMemberRequest()
151159
response *organization.CreateOrganizationMemberResponse
152160
uin int64
@@ -169,15 +177,15 @@ func resourceTencentCloudOrganizationOrgMemberCreate(d *schema.ResourceData, met
169177
}
170178
}
171179

172-
if v, _ := d.GetOk("node_id"); v != nil {
180+
if v, ok := d.GetOkExists("node_id"); ok {
173181
request.NodeId = helper.IntInt64(v.(int))
174182
}
175183

176184
if v, ok := d.GetOk("remark"); ok {
177185
request.Remark = helper.String(v.(string))
178186
}
179187

180-
if v, _ := d.GetOk("record_id"); v != nil {
188+
if v, ok := d.GetOkExists("record_id"); ok {
181189
request.RecordId = helper.IntInt64(v.(int))
182190
}
183191

@@ -201,9 +209,13 @@ func resourceTencentCloudOrganizationOrgMemberCreate(d *schema.ResourceData, met
201209
if e != nil {
202210
return tccommon.RetryError(e)
203211
} else {
204-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
205-
logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
212+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
206213
}
214+
215+
if result == nil || result.Response == nil {
216+
return resource.NonRetryableError(fmt.Errorf("Create organization orgMember failed, Response is nil."))
217+
}
218+
207219
response = result
208220
return nil
209221
})
@@ -213,8 +225,11 @@ func resourceTencentCloudOrganizationOrgMemberCreate(d *schema.ResourceData, met
213225
return err
214226
}
215227

216-
uin = *response.Response.Uin
228+
if response.Response.Uin == nil {
229+
return fmt.Errorf("Uin is nil.")
230+
}
217231

232+
uin = *response.Response.Uin
218233
d.SetId(helper.Int64ToStr(uin))
219234
return resourceTencentCloudOrganizationOrgMemberRead(d, meta)
220235
}
@@ -223,22 +238,21 @@ func resourceTencentCloudOrganizationOrgMemberRead(d *schema.ResourceData, meta
223238
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member.read")()
224239
defer tccommon.InconsistentCheck(d, meta)()
225240

226-
logId := tccommon.GetLogId(tccommon.ContextNil)
227-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
228-
229-
service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
230-
231-
orgMemberId := d.Id()
241+
var (
242+
logId = tccommon.GetLogId(tccommon.ContextNil)
243+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
244+
service = OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
245+
orgMemberId = d.Id()
246+
)
232247

233248
orgMember, err := service.DescribeOrganizationOrgMember(ctx, orgMemberId)
234-
235249
if err != nil {
236250
return err
237251
}
238252

239253
if orgMember == nil {
240254
d.SetId("")
241-
return fmt.Errorf("resource `orgMember` %s does not exist", orgMemberId)
255+
return fmt.Errorf("resource `tencentcloud_organization_org_member` %s does not exist", orgMemberId)
242256
}
243257

244258
if orgMember.Name != nil {
@@ -256,6 +270,7 @@ func resourceTencentCloudOrganizationOrgMemberRead(d *schema.ResourceData, meta
256270
orgPermissionIds = append(orgPermissionIds, *orgPermission.Id)
257271
}
258272
}
273+
259274
_ = d.Set("permission_ids", orgPermissionIds)
260275
}
261276

@@ -290,12 +305,14 @@ func resourceTencentCloudOrganizationOrgMemberRead(d *schema.ResourceData, meta
290305
if orgPermission.Id != nil {
291306
orgPermissionMap["id"] = orgPermission.Id
292307
}
308+
293309
if orgPermission.Name != nil {
294310
orgPermissionMap["name"] = orgPermission.Name
295311
}
296312

297313
orgPermissionList = append(orgPermissionList, orgPermissionMap)
298314
}
315+
299316
_ = d.Set("org_permission", orgPermissionList)
300317
}
301318

@@ -320,6 +337,7 @@ func resourceTencentCloudOrganizationOrgMemberRead(d *schema.ResourceData, meta
320337
for _, tag := range orgMember.Tags {
321338
tags[*tag.TagKey] = *tag.TagValue
322339
}
340+
323341
_ = d.Set("tags", tags)
324342
}
325343

@@ -330,103 +348,119 @@ func resourceTencentCloudOrganizationOrgMemberUpdate(d *schema.ResourceData, met
330348
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member.update")()
331349
defer tccommon.InconsistentCheck(d, meta)()
332350

333-
logId := tccommon.GetLogId(tccommon.ContextNil)
334-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
335-
336-
request := organization.NewMoveOrganizationNodeMembersRequest()
337-
updateRequest := organization.NewUpdateOrganizationMemberRequest()
351+
var (
352+
logId = tccommon.GetLogId(tccommon.ContextNil)
353+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
354+
orgMemberId = d.Id()
355+
needChange bool
356+
)
338357

339-
orgMemberId := d.Id()
358+
if d.HasChange("record_id") {
359+
return fmt.Errorf("`record_id` do not support change now.")
360+
}
340361

341-
request.MemberUin = []*int64{helper.Int64(helper.StrToInt64(orgMemberId))}
342-
updateRequest.MemberUin = helper.Uint64(helper.StrToUInt64(orgMemberId))
343362
if d.HasChange("node_id") {
344-
if v, _ := d.GetOk("node_id"); v != nil {
363+
request := organization.NewMoveOrganizationNodeMembersRequest()
364+
if v, ok := d.GetOkExists("node_id"); ok {
345365
request.NodeId = helper.IntInt64(v.(int))
346366
}
367+
368+
request.MemberUin = []*int64{helper.Int64(helper.StrToInt64(orgMemberId))}
347369
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
348370
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().MoveOrganizationNodeMembers(request)
349371
if e != nil {
350372
return tccommon.RetryError(e)
351373
} else {
352-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
353-
logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
374+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
354375
}
376+
355377
return nil
356378
})
357379

358380
if err != nil {
359-
log.Printf("[CRITAL]%s create organization orgMember failed, reason:%+v", logId, err)
381+
log.Printf("[CRITAL]%s move organization node members failed, reason:%+v", logId, err)
360382
return err
361383
}
362384
}
363385

364-
if d.HasChange("name") {
365-
if v, _ := d.GetOk("name"); v != nil {
366-
updateRequest.Name = helper.String(v.(string))
386+
mutableArgs := []string{"name", "remark", "policy_type", "permission_ids", "is_allow_quit", "pay_uin"}
387+
for _, v := range mutableArgs {
388+
if d.HasChange(v) {
389+
needChange = true
390+
break
367391
}
368392
}
369393

370-
if d.HasChange("remark") {
371-
if v, _ := d.GetOk("remark"); v != nil {
372-
updateRequest.Remark = helper.String(v.(string))
394+
if needChange {
395+
request := organization.NewUpdateOrganizationMemberRequest()
396+
if d.HasChange("name") {
397+
if v, ok := d.GetOk("name"); ok {
398+
request.Name = helper.String(v.(string))
399+
}
373400
}
374-
}
375401

376-
if d.HasChange("policy_type") {
377-
if v, _ := d.GetOk("policy_type"); v != nil {
378-
updateRequest.PolicyType = helper.String(v.(string))
402+
if d.HasChange("remark") {
403+
if v, ok := d.GetOk("remark"); ok {
404+
request.Remark = helper.String(v.(string))
405+
}
379406
}
380-
if v, _ := d.GetOk("permission_ids"); v != nil {
381-
ids := v.(*schema.Set).List()
382-
for i := range ids {
383-
id := ids[i].(int)
384-
updateRequest.PermissionIds = append(updateRequest.PermissionIds, helper.IntUint64(id))
407+
408+
if d.HasChange("policy_type") {
409+
if v, ok := d.GetOk("policy_type"); ok {
410+
request.PolicyType = helper.String(v.(string))
411+
}
412+
413+
if v, ok := d.GetOk("permission_ids"); ok {
414+
ids := v.(*schema.Set).List()
415+
for i := range ids {
416+
id := ids[i].(int)
417+
request.PermissionIds = append(request.PermissionIds, helper.IntUint64(id))
418+
}
385419
}
386420
}
387-
}
388421

389-
if d.HasChange("permission_ids") {
390-
if v, _ := d.GetOk("permission_ids"); v != nil {
391-
ids := v.(*schema.Set).List()
392-
for i := range ids {
393-
id := ids[i].(int)
394-
updateRequest.PermissionIds = append(updateRequest.PermissionIds, helper.IntUint64(id))
422+
if d.HasChange("permission_ids") {
423+
if v, ok := d.GetOk("permission_ids"); ok {
424+
ids := v.(*schema.Set).List()
425+
for i := range ids {
426+
id := ids[i].(int)
427+
request.PermissionIds = append(request.PermissionIds, helper.IntUint64(id))
428+
}
429+
}
430+
431+
if v, ok := d.GetOk("policy_type"); ok {
432+
request.PolicyType = helper.String(v.(string))
395433
}
396434
}
397-
if v, _ := d.GetOk("policy_type"); v != nil {
398-
updateRequest.PolicyType = helper.String(v.(string))
435+
436+
if d.HasChange("is_allow_quit") {
437+
if v, ok := d.GetOk("is_allow_quit"); ok {
438+
request.IsAllowQuit = helper.String(v.(string))
439+
}
399440
}
400-
}
401441

402-
if d.HasChange("is_allow_quit") {
403-
if v, _ := d.GetOk("is_allow_quit"); v != nil {
404-
updateRequest.IsAllowQuit = helper.String(v.(string))
442+
if d.HasChange("pay_uin") {
443+
if v, ok := d.GetOk("pay_uin"); ok {
444+
request.PayUin = helper.String(v.(string))
445+
}
405446
}
406-
}
407447

408-
if d.HasChange("record_id") {
409-
return fmt.Errorf("`record_id` do not support change now.")
410-
}
448+
request.MemberUin = helper.Uint64(helper.StrToUInt64(orgMemberId))
449+
UpdateErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
450+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().UpdateOrganizationMember(request)
451+
if e != nil {
452+
return tccommon.RetryError(e)
453+
} else {
454+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
455+
}
411456

412-
if d.HasChange("pay_uin") {
413-
if v, _ := d.GetOk("pay_uin"); v != nil {
414-
updateRequest.PayUin = helper.String(v.(string))
415-
}
416-
}
457+
return nil
458+
})
417459

418-
UpdateErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
419-
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().UpdateOrganizationMember(updateRequest)
420-
if e != nil {
421-
return tccommon.RetryError(e)
422-
} else {
423-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, updateRequest.GetAction(), updateRequest.ToJsonString(), result.ToJsonString())
460+
if UpdateErr != nil {
461+
log.Printf("[CRITAL]%s update organization member failed, reason:%+v", logId, UpdateErr)
462+
return UpdateErr
424463
}
425-
return nil
426-
})
427-
if UpdateErr != nil {
428-
log.Printf("[CRITAL]%s update organization orgMember failed, reason:%+v", logId, UpdateErr)
429-
return UpdateErr
430464
}
431465

432466
if d.HasChange("tags") {
@@ -439,22 +473,34 @@ func resourceTencentCloudOrganizationOrgMemberUpdate(d *schema.ResourceData, met
439473
return err
440474
}
441475
}
476+
442477
return resourceTencentCloudOrganizationOrgMemberRead(d, meta)
443478
}
444479

445480
func resourceTencentCloudOrganizationOrgMemberDelete(d *schema.ResourceData, meta interface{}) error {
446481
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member.delete")()
447482
defer tccommon.InconsistentCheck(d, meta)()
448483

449-
logId := tccommon.GetLogId(tccommon.ContextNil)
450-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
451-
452-
service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
484+
var (
485+
logId = tccommon.GetLogId(tccommon.ContextNil)
486+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
487+
service = OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
488+
orgMemberId = d.Id()
489+
forceDeleteAccount bool
490+
)
453491

454-
orgMemberId := d.Id()
492+
if v, ok := d.GetOkExists("force_delete_account"); ok {
493+
forceDeleteAccount = v.(bool)
494+
}
455495

456-
if err := service.DeleteOrganizationOrgMemberById(ctx, orgMemberId); err != nil {
457-
return err
496+
if forceDeleteAccount {
497+
if err := service.DeleteOrganizationAccountById(ctx, orgMemberId); err != nil {
498+
return err
499+
}
500+
} else {
501+
if err := service.DeleteOrganizationOrgMemberById(ctx, orgMemberId); err != nil {
502+
return err
503+
}
458504
}
459505

460506
return nil

0 commit comments

Comments
 (0)