Skip to content

Commit 6574ab0

Browse files
authored
Update User roles when re-enabling previously deleted user (#1174)
* update roles when re-enabling existing users
1 parent 1000e58 commit 6574ab0

File tree

4 files changed

+2862
-23
lines changed

4 files changed

+2862
-23
lines changed

datadog/resource_datadog_user.go

Lines changed: 51 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,40 @@ func buildDatadogUserV2UpdateStruct(d *schema.ResourceData, userID string) *data
118118
return userRequest
119119
}
120120

121+
func updateRoles(meta interface{}, userID string, oldRoles *schema.Set, newRoles *schema.Set) diag.Diagnostics {
122+
providerConf := meta.(*ProviderConfiguration)
123+
datadogClientV2 := providerConf.DatadogClientV2
124+
authV2 := providerConf.AuthV2
125+
126+
rolesToRemove := oldRoles.Difference(newRoles)
127+
rolesToAdd := newRoles.Difference(oldRoles)
128+
129+
for _, roleI := range rolesToRemove.List() {
130+
role := roleI.(string)
131+
userRelation := datadogV2.NewRelationshipToUserWithDefaults()
132+
userRelationData := datadogV2.NewRelationshipToUserDataWithDefaults()
133+
userRelationData.SetId(userID)
134+
userRelation.SetData(*userRelationData)
135+
_, httpResponse, err := datadogClientV2.RolesApi.RemoveUserFromRole(authV2, role, *userRelation)
136+
if err != nil {
137+
return utils.TranslateClientErrorDiag(err, httpResponse, "error removing user from role")
138+
}
139+
}
140+
for _, roleI := range rolesToAdd.List() {
141+
role := roleI.(string)
142+
roleRelation := datadogV2.NewRelationshipToUserWithDefaults()
143+
roleRelationData := datadogV2.NewRelationshipToUserDataWithDefaults()
144+
roleRelationData.SetId(userID)
145+
roleRelation.SetData(*roleRelationData)
146+
_, httpResponse, err := datadogClientV2.RolesApi.AddUserToRole(authV2, role, *roleRelation)
147+
if err != nil {
148+
return utils.TranslateClientErrorDiag(err, httpResponse, "error adding user to role")
149+
}
150+
}
151+
152+
return nil
153+
}
154+
121155
func resourceDatadogUserCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
122156
providerConf := meta.(*ProviderConfiguration)
123157
datadogClientV2 := providerConf.DatadogClientV2
@@ -159,6 +193,19 @@ func resourceDatadogUserCreate(ctx context.Context, d *schema.ResourceData, meta
159193
if err := utils.CheckForUnparsed(updatedUser); err != nil {
160194
return diag.FromErr(err)
161195
}
196+
197+
// Update roles
198+
_, newRolesI := d.GetChange("roles")
199+
newRoles := newRolesI.(*schema.Set)
200+
oldRoles := schema.NewSet(newRoles.F, []interface{}{})
201+
for _, existingRole := range updatedUser.Data.Relationships.Roles.GetData() {
202+
oldRoles.Add(existingRole.GetId())
203+
}
204+
205+
if err := updateRoles(meta, userID, oldRoles, newRoles); err != nil {
206+
return err
207+
}
208+
162209
if err := updateUserStateV2(d, &updatedUser); err != nil {
163210
return err
164211
}
@@ -261,6 +308,7 @@ func resourceDatadogUserRead(ctx context.Context, d *schema.ResourceData, meta i
261308
}
262309
return updateUserStateV2(d, &userResponse)
263310
}
311+
264312
func resourceDatadogUserUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
265313
providerConf := meta.(*ProviderConfiguration)
266314
datadogClientV2 := providerConf.DatadogClientV2
@@ -270,29 +318,9 @@ func resourceDatadogUserUpdate(ctx context.Context, d *schema.ResourceData, meta
270318
oldRolesI, newRolesI := d.GetChange("roles")
271319
oldRoles := oldRolesI.(*schema.Set)
272320
newRoles := newRolesI.(*schema.Set)
273-
rolesToRemove := oldRoles.Difference(newRoles)
274-
rolesToAdd := newRoles.Difference(oldRoles)
275-
for _, roleI := range rolesToRemove.List() {
276-
role := roleI.(string)
277-
userRelation := datadogV2.NewRelationshipToUserWithDefaults()
278-
userRelationData := datadogV2.NewRelationshipToUserDataWithDefaults()
279-
userRelationData.SetId(d.Id())
280-
userRelation.SetData(*userRelationData)
281-
_, httpResponse, err := datadogClientV2.RolesApi.RemoveUserFromRole(authV2, role, *userRelation)
282-
if err != nil {
283-
return utils.TranslateClientErrorDiag(err, httpResponse, "error removing user from role")
284-
}
285-
}
286-
for _, roleI := range rolesToAdd.List() {
287-
role := roleI.(string)
288-
roleRelation := datadogV2.NewRelationshipToUserWithDefaults()
289-
roleRelationData := datadogV2.NewRelationshipToUserDataWithDefaults()
290-
roleRelationData.SetId(d.Id())
291-
roleRelation.SetData(*roleRelationData)
292-
_, httpResponse, err := datadogClientV2.RolesApi.AddUserToRole(authV2, role, *roleRelation)
293-
if err != nil {
294-
return utils.TranslateClientErrorDiag(err, httpResponse, "error adding user to role")
295-
}
321+
322+
if err := updateRoles(meta, d.Id(), oldRoles, newRoles); err != nil {
323+
return err
296324
}
297325
}
298326

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2021-09-14T14:29:44.975085-04:00

0 commit comments

Comments
 (0)