@@ -6,7 +6,7 @@ Example Usage
66```hcl
77resource "tencentcloud_cam_group_membership" "foo" {
88 group_id = tencentcloud_cam_group.foo.id
9- user_ids = [tencentcloud_cam_user.foo.id , tencentcloud_cam_user.bar.id ]
9+ user_names = [tencentcloud_cam_user.foo.name , tencentcloud_cam_user.bar.name ]
1010}
1111```
1212
@@ -51,12 +51,23 @@ func resourceTencentCloudCamGroupMembership() *schema.Resource {
5151 },
5252 "user_ids" : {
5353 Type : schema .TypeSet ,
54- Required : true ,
54+ Optional : true ,
55+ AtLeastOneOf : []string {"user_ids" , "user_names" },
5556 Elem : & schema.Schema {
5657 Type : schema .TypeString ,
5758 },
59+ Deprecated : "It has been deprecated from version 1.59.5. Use `user_names` instead." ,
5860 Description : "ID set of the CAM group members." ,
5961 },
62+ "user_names" : {
63+ Type : schema .TypeSet ,
64+ Optional : true ,
65+ AtLeastOneOf : []string {"user_ids" , "user_names" },
66+ Elem : & schema.Schema {
67+ Type : schema .TypeString ,
68+ },
69+ Description : "User name set as ID of the CAM group members." ,
70+ },
6071 },
6172 }
6273}
@@ -67,8 +78,11 @@ func resourceTencentCloudCamGroupMembershipCreate(d *schema.ResourceData, meta i
6778 logId := getLogId (contextNil )
6879
6980 groupId := d .Get ("group_id" ).(string )
70- members := d .Get ("user_ids" ).(* schema.Set ).List ()
71- err := addUsersToGroup (members , groupId , meta )
81+ members , _ , err := getUserIds (d )
82+ if err != nil {
83+ return err
84+ }
85+ err = addUsersToGroup (members .List (), groupId , meta )
7286 if err != nil {
7387 log .Printf ("[CRITAL]%s create CAM group membership failed, reason:%s\n " , logId , err .Error ())
7488 return err
@@ -132,7 +146,11 @@ func resourceTencentCloudCamGroupMembershipRead(d *schema.ResourceData, meta int
132146 //this may cause problems when there are members in two dimensions array
133147 //need to read state of the tfstate file to clear the relationships
134148 //in this situation, import action is not supported
135- stateMembers := d .Get ("user_ids" ).(* schema.Set )
149+ stateMembers , usingNames , err := getUserIds (d )
150+ if err != nil {
151+ return err
152+ }
153+ memberResult := make ([]* string , 0 )
136154 if stateMembers .Len () != 0 {
137155 //the old state exist
138156 //create a new membership with state
@@ -142,9 +160,15 @@ func resourceTencentCloudCamGroupMembershipRead(d *schema.ResourceData, meta int
142160 exactMembers = append (exactMembers , v )
143161 }
144162 }
145- _ = d .Set ("user_ids" , exactMembers )
163+ memberResult = exactMembers
164+ } else {
165+ memberResult = members
166+ }
167+
168+ if usingNames {
169+ _ = d .Set ("user_names" , memberResult )
146170 } else {
147- _ = d .Set ("user_ids" , members )
171+ _ = d .Set ("user_ids" , memberResult )
148172 }
149173 _ = d .Set ("group_id" , groupId )
150174
@@ -158,26 +182,8 @@ func resourceTencentCloudCamGroupMembershipUpdate(d *schema.ResourceData, meta i
158182
159183 groupId := d .Id ()
160184
161- if d .HasChange ("user_ids" ) {
162- o , n := d .GetChange ("user_ids" )
163- os := o .(* schema.Set )
164- ns := n .(* schema.Set )
165- add := ns .Difference (os ).List ()
166- remove := os .Difference (ns ).List ()
167- if len (remove ) > 0 {
168- oErr := removeUsersFromGroup (remove , groupId , meta )
169- if oErr != nil {
170- log .Printf ("[CRITAL]%s update CAM group membership failed, reason:%s\n " , logId , oErr .Error ())
171- return oErr
172- }
173- }
174- if len (add ) > 0 {
175- nErr := addUsersToGroup (add , groupId , meta )
176- if nErr != nil {
177- log .Printf ("[CRITAL]%s update CAM group membership failed, reason:%s\n " , logId , nErr .Error ())
178- return nErr
179- }
180- }
185+ if err := processChange (d , groupId , logId , meta ); err != nil {
186+ return err
181187 }
182188
183189 return resourceTencentCloudCamGroupMembershipRead (d , meta )
@@ -188,8 +194,12 @@ func resourceTencentCloudCamGroupMembershipDelete(d *schema.ResourceData, meta i
188194
189195 logId := getLogId (contextNil )
190196 groupId := d .Get ("group_id" ).(string )
191- members := d .Get ("user_ids" ).(* schema.Set ).List ()
192- err := removeUsersFromGroup (members , groupId , meta )
197+ userIds , _ , err := getUserIds (d )
198+ if err != nil {
199+ return err
200+ }
201+ members := userIds .List ()
202+ err = removeUsersFromGroup (members , groupId , meta )
193203 if err != nil {
194204 log .Printf ("[CRITAL]%s delete CAM group failed, reason:%s\n " , logId , err .Error ())
195205 return err
@@ -320,3 +330,49 @@ func removeUsersFromGroup(members []interface{}, groupId string, meta interface{
320330 }
321331 return nil
322332}
333+
334+ func getUserIds (d * schema.ResourceData ) (data * schema.Set , usingNames bool , errRet error ) {
335+ names , hasNames := d .GetOk ("user_names" )
336+ ids , hasIds := d .GetOk ("user_ids" )
337+
338+ if hasNames {
339+ return names .(* schema.Set ), true , nil
340+ } else if hasIds {
341+ return ids .(* schema.Set ), false , nil
342+ }
343+ return nil , false , fmt .Errorf ("no user names provided %v %v" , hasNames , hasIds )
344+ }
345+
346+ func processChange (d * schema.ResourceData , groupId string , logId string , meta interface {}) error {
347+ var (
348+ o interface {}
349+ n interface {}
350+ )
351+ if d .HasChange ("user_names" ) {
352+ o , n = d .GetChange ("user_names" )
353+ } else if d .HasChange ("user_ids" ) {
354+ o , n = d .GetChange ("user_ids" )
355+ } else {
356+ return nil
357+ }
358+
359+ os := o .(* schema.Set )
360+ ns := n .(* schema.Set )
361+ add := ns .Difference (os ).List ()
362+ remove := os .Difference (ns ).List ()
363+ if len (remove ) > 0 {
364+ oErr := removeUsersFromGroup (remove , groupId , meta )
365+ if oErr != nil {
366+ log .Printf ("[CRITAL]%s update CAM group membership failed, reason:%s\n " , logId , oErr .Error ())
367+ return oErr
368+ }
369+ }
370+ if len (add ) > 0 {
371+ nErr := addUsersToGroup (add , groupId , meta )
372+ if nErr != nil {
373+ log .Printf ("[CRITAL]%s update CAM group membership failed, reason:%s\n " , logId , nErr .Error ())
374+ return nErr
375+ }
376+ }
377+ return nil
378+ }
0 commit comments