@@ -17,8 +17,8 @@ import (
1717
1818func 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
445480func 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