@@ -118,6 +118,40 @@ func buildDatadogUserV2UpdateStruct(d *schema.ResourceData, userID string) *data
118
118
return userRequest
119
119
}
120
120
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
+
121
155
func resourceDatadogUserCreate (ctx context.Context , d * schema.ResourceData , meta interface {}) diag.Diagnostics {
122
156
providerConf := meta .(* ProviderConfiguration )
123
157
datadogClientV2 := providerConf .DatadogClientV2
@@ -159,6 +193,19 @@ func resourceDatadogUserCreate(ctx context.Context, d *schema.ResourceData, meta
159
193
if err := utils .CheckForUnparsed (updatedUser ); err != nil {
160
194
return diag .FromErr (err )
161
195
}
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
+
162
209
if err := updateUserStateV2 (d , & updatedUser ); err != nil {
163
210
return err
164
211
}
@@ -261,6 +308,7 @@ func resourceDatadogUserRead(ctx context.Context, d *schema.ResourceData, meta i
261
308
}
262
309
return updateUserStateV2 (d , & userResponse )
263
310
}
311
+
264
312
func resourceDatadogUserUpdate (ctx context.Context , d * schema.ResourceData , meta interface {}) diag.Diagnostics {
265
313
providerConf := meta .(* ProviderConfiguration )
266
314
datadogClientV2 := providerConf .DatadogClientV2
@@ -270,29 +318,9 @@ func resourceDatadogUserUpdate(ctx context.Context, d *schema.ResourceData, meta
270
318
oldRolesI , newRolesI := d .GetChange ("roles" )
271
319
oldRoles := oldRolesI .(* schema.Set )
272
320
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
296
324
}
297
325
}
298
326
0 commit comments