@@ -11,6 +11,7 @@ import (
11
11
"github.com/kiwicom/terraform-provider-montecarlo/monte_carlo/common"
12
12
13
13
"github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
14
+ "github.com/hashicorp/terraform-plugin-framework/path"
14
15
"github.com/hashicorp/terraform-plugin-framework/resource"
15
16
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
16
17
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
@@ -20,7 +21,7 @@ import (
20
21
)
21
22
22
23
var groupsRegex = regexp .MustCompile (`^groups/.+$` )
23
- var memberRegex = regexp .MustCompile (`^user/ .+$` )
24
+ var memberRegex = regexp .MustCompile (`^user: .+$` )
24
25
25
26
// Ensure provider defined types fully satisfy framework interfaces.
26
27
var _ resource.Resource = & IamMemberResource {}
@@ -56,7 +57,7 @@ func (r *IamMemberResource) Schema(ctx context.Context, req resource.SchemaReque
56
57
stringplanmodifier .RequiresReplaceIfConfigured (),
57
58
},
58
59
Validators : []validator.String {
59
- stringvalidator .RegexMatches (groupsRegex , "Expected format: groups/{group_name}" ),
60
+ stringvalidator .RegexMatches (groupsRegex , "Expected format - groups/{group_name}" ),
60
61
},
61
62
},
62
63
"member" : schema.StringAttribute {
@@ -65,7 +66,7 @@ func (r *IamMemberResource) Schema(ctx context.Context, req resource.SchemaReque
65
66
stringplanmodifier .RequiresReplaceIfConfigured (),
66
67
},
67
68
Validators : []validator.String {
68
- stringvalidator .RegexMatches (memberRegex , "Expected format: user/ {user_email}" ),
69
+ stringvalidator .RegexMatches (memberRegex , "Expected format - user: {user_email}" ),
69
70
},
70
71
},
71
72
"member_id" : schema.StringAttribute {
@@ -92,7 +93,7 @@ func (r *IamMemberResource) Create(ctx context.Context, req resource.CreateReque
92
93
return
93
94
}
94
95
95
- userEmail := strings .Split (data .Member .ValueString (), "user/ " )[1 ]
96
+ userEmail := strings .Split (data .Member .ValueString (), "user: " )[1 ]
96
97
getUserResult := client.GetUsersInAccount {}
97
98
variables := map [string ]interface {}{
98
99
"email" : userEmail ,
@@ -101,7 +102,7 @@ func (r *IamMemberResource) Create(ctx context.Context, req resource.CreateReque
101
102
}
102
103
103
104
if err := r .client .Query (ctx , & getUserResult , variables ); err != nil {
104
- to_print := fmt .Sprintf ("MC client 'getTables ' query result - %s" , err .Error ())
105
+ to_print := fmt .Sprintf ("MC client 'getUsersInAccount ' query result - %s" , err .Error ())
105
106
resp .Diagnostics .AddError (to_print , "" )
106
107
return
107
108
} else if len (getUserResult .GetUsersInAccount .Edges ) == 0 {
@@ -131,9 +132,9 @@ func (r *IamMemberResource) Create(ctx context.Context, req resource.CreateReque
131
132
}
132
133
133
134
memberUserIds := make ([]string , len (found .Users )+ 1 )
134
- memberUserIds [len (found .Users )] = getUserResult .GetUsersInAccount .Edges [0 ].Node .Id
135
+ memberUserIds [len (found .Users )] = getUserResult .GetUsersInAccount .Edges [0 ].Node .CognitoUserId
135
136
for i , user := range found .Users {
136
- memberUserIds [i ] = user .Id
137
+ memberUserIds [i ] = user .CognitoUserId
137
138
}
138
139
139
140
updateResult := client.CreateOrUpdateAuthorizationGroup {}
@@ -142,7 +143,7 @@ func (r *IamMemberResource) Create(ctx context.Context, req resource.CreateReque
142
143
"label" : found .Label ,
143
144
"description" : found .Description ,
144
145
"roles" : rolesToNames (found .Roles ),
145
- "domainRestrictionIds" : domainsToUuids (found .DomainRestrictions ),
146
+ "domainRestrictionIds" : domainsToUuids [client. UUID ] (found .DomainRestrictions ),
146
147
"ssoGroup" : found .SsoGroup ,
147
148
"memberUserIds" : memberUserIds ,
148
149
}
@@ -151,7 +152,7 @@ func (r *IamMemberResource) Create(ctx context.Context, req resource.CreateReque
151
152
to_print := fmt .Sprintf ("MC client 'createOrUpdateAuthorizationGroup' mutation result - %s" , err .Error ())
152
153
resp .Diagnostics .AddError (to_print , "" )
153
154
} else {
154
- data .MemberId = types .StringValue (getUserResult .GetUsersInAccount .Edges [0 ].Node .Id )
155
+ data .MemberId = types .StringValue (getUserResult .GetUsersInAccount .Edges [0 ].Node .CognitoUserId )
155
156
resp .Diagnostics .Append (resp .State .Set (ctx , & data )... )
156
157
}
157
158
}
@@ -163,7 +164,7 @@ func (r *IamMemberResource) Read(ctx context.Context, req resource.ReadRequest,
163
164
return
164
165
}
165
166
166
- userEmail := strings .Split (data .Member .ValueString (), "user/ " )[1 ]
167
+ userEmail := strings .Split (data .Member .ValueString (), "user: " )[1 ]
167
168
getUserResult := client.GetUsersInAccount {}
168
169
variables := map [string ]interface {}{
169
170
"email" : userEmail ,
@@ -172,7 +173,7 @@ func (r *IamMemberResource) Read(ctx context.Context, req resource.ReadRequest,
172
173
}
173
174
174
175
if err := r .client .Query (ctx , & getUserResult , variables ); err != nil {
175
- to_print := fmt .Sprintf ("MC client 'getTables ' query result - %s" , err .Error ())
176
+ to_print := fmt .Sprintf ("MC client 'getUsersInAccount ' query result - %s" , err .Error ())
176
177
resp .Diagnostics .AddError (to_print , "" )
177
178
return
178
179
} else if len (getUserResult .GetUsersInAccount .Edges ) == 0 {
@@ -200,13 +201,14 @@ func (r *IamMemberResource) Read(ctx context.Context, req resource.ReadRequest,
200
201
201
202
if found == nil || found .SsoGroup != nil {
202
203
to_print := fmt .Sprintf ("Group %s not found or is SSO managed" , data .Group .ValueString ())
203
- resp .Diagnostics .AddError (to_print , "" )
204
+ resp .Diagnostics .AddWarning (to_print , "" )
205
+ resp .State .RemoveResource (ctx )
204
206
} else if ! slices .Contains (found .Users , getUserResult .GetUsersInAccount .Edges [0 ].Node ) {
205
207
to_print := fmt .Sprintf ("User %s not found in group %s" , userEmail , data .Group .ValueString ())
206
208
resp .Diagnostics .AddWarning (to_print , "" )
207
209
resp .State .RemoveResource (ctx )
208
210
} else {
209
- data .MemberId = types .StringValue (getUserResult .GetUsersInAccount .Edges [0 ].Node .Id )
211
+ data .MemberId = types .StringValue (getUserResult .GetUsersInAccount .Edges [0 ].Node .CognitoUserId )
210
212
resp .Diagnostics .Append (resp .State .Set (ctx , & data )... )
211
213
}
212
214
}
@@ -227,7 +229,7 @@ func (r *IamMemberResource) Delete(ctx context.Context, req resource.DeleteReque
227
229
variables := map [string ]interface {}{}
228
230
if err := r .client .Query (ctx , & getGroupResult , variables ); err != nil {
229
231
to_print := fmt .Sprintf ("MC client 'GetAuthorizationGroups' query result - %s" , err .Error ())
230
- resp .Diagnostics .AddWarning (to_print , "" )
232
+ resp .Diagnostics .AddError (to_print , "" )
231
233
return
232
234
}
233
235
@@ -244,7 +246,7 @@ func (r *IamMemberResource) Delete(ctx context.Context, req resource.DeleteReque
244
246
245
247
memberUserIds := make ([]string , len (found .Users ))
246
248
for i , user := range found .Users {
247
- memberUserIds [i ] = user .Id
249
+ memberUserIds [i ] = user .CognitoUserId
248
250
}
249
251
250
252
updateResult := client.CreateOrUpdateAuthorizationGroup {}
@@ -254,7 +256,7 @@ func (r *IamMemberResource) Delete(ctx context.Context, req resource.DeleteReque
254
256
"label" : found .Label ,
255
257
"description" : found .Description ,
256
258
"roles" : rolesToNames (found .Roles ),
257
- "domainRestrictionIds" : domainsToUuids (found .DomainRestrictions ),
259
+ "domainRestrictionIds" : domainsToUuids [client. UUID ] (found .DomainRestrictions ),
258
260
"ssoGroup" : found .SsoGroup ,
259
261
"memberUserIds" : memberUserIds ,
260
262
}
@@ -266,5 +268,13 @@ func (r *IamMemberResource) Delete(ctx context.Context, req resource.DeleteReque
266
268
}
267
269
268
270
func (r * IamMemberResource ) ImportState (ctx context.Context , req resource.ImportStateRequest , resp * resource.ImportStateResponse ) {
269
- // TODO
271
+ idsImported := strings .Split (req .ID , "," )
272
+ if len (idsImported ) == 2 && idsImported [0 ] != "" && idsImported [1 ] != "" {
273
+ resp .Diagnostics .Append (resp .State .SetAttribute (ctx , path .Root ("group" ), idsImported [0 ])... )
274
+ resp .Diagnostics .Append (resp .State .SetAttribute (ctx , path .Root ("member" ), idsImported [1 ])... )
275
+ } else {
276
+ resp .Diagnostics .AddError ("Unexpected Import Identifier" , fmt .Sprintf (
277
+ "Expected import identifier with format: groups/<group_name>,user:<user_email>. Got: %q" , req .ID ),
278
+ )
279
+ }
270
280
}
0 commit comments