@@ -216,49 +216,10 @@ func (r *serviceAccountResource) Create(ctx context.Context, req resource.Create
216216 ctx , cancel := context .WithTimeout (ctx , createTimeout )
217217 defer cancel ()
218218
219- description := ""
220- if ! plan .Description .IsNull () {
221- description = plan .Description .ValueString ()
222- }
223-
224- spec := & identityv1.ServiceAccountSpec {
225- Name : plan .Name .ValueString (),
226- Description : description ,
227- }
228-
229- // Handle namespace-scoped access
230- if ! plan .NamespaceScopedAccess .IsNull () {
231- namespaceScopedAccess , d := getNamespaceScopedAccessFromModel (ctx , & plan )
232- resp .Diagnostics .Append (d ... )
233- if resp .Diagnostics .HasError () {
234- return
235- }
236- spec .NamespaceScopedAccess = namespaceScopedAccess
237- } else {
238- // Handle account-scoped access
239- if plan .AccountAccess .IsNull () {
240- resp .Diagnostics .AddError ("Missing access configuration" , "Either account_access or namespace_scoped_access must be provided" )
241- return
242- }
243-
244- namespaceAccesses , d := getNamespaceAccessesFromServiceAccountModel (ctx , & plan )
245- resp .Diagnostics .Append (d ... )
246- if resp .Diagnostics .HasError () {
247- return
248- }
249-
250- role , err := enums .ToAccountAccessRole (plan .AccountAccess .ValueString ())
251- if err != nil {
252- resp .Diagnostics .AddError ("Failed to convert account access role" , err .Error ())
253- return
254- }
255-
256- spec .Access = & identityv1.Access {
257- AccountAccess : & identityv1.AccountAccess {
258- Role : role ,
259- },
260- NamespaceAccesses : namespaceAccesses ,
261- }
219+ spec , d := buildServiceAccountSpec (ctx , & plan )
220+ resp .Diagnostics .Append (d ... )
221+ if resp .Diagnostics .HasError () {
222+ return
262223 }
263224
264225 svcResp , err := r .client .CloudService ().CreateServiceAccount (ctx , & cloudservicev1.CreateServiceAccountRequest {
@@ -355,49 +316,10 @@ func (r *serviceAccountResource) Update(ctx context.Context, req resource.Update
355316 return
356317 }
357318
358- description := ""
359- if ! plan .Description .IsNull () {
360- description = plan .Description .ValueString ()
361- }
362-
363- spec := & identityv1.ServiceAccountSpec {
364- Name : plan .Name .ValueString (),
365- Description : description ,
366- }
367-
368- // Handle namespace-scoped access
369- if ! plan .NamespaceScopedAccess .IsNull () {
370- namespaceScopedAccess , d := getNamespaceScopedAccessFromModel (ctx , & plan )
371- resp .Diagnostics .Append (d ... )
372- if resp .Diagnostics .HasError () {
373- return
374- }
375- spec .NamespaceScopedAccess = namespaceScopedAccess
376- } else {
377- // Handle account-scoped access
378- if plan .AccountAccess .IsNull () {
379- resp .Diagnostics .AddError ("Missing access configuration" , "Either account_access or namespace_scoped_access must be provided" )
380- return
381- }
382-
383- namespaceAccesses , d := getNamespaceAccessesFromServiceAccountModel (ctx , & plan )
384- resp .Diagnostics .Append (d ... )
385- if resp .Diagnostics .HasError () {
386- return
387- }
388-
389- role , err := enums .ToAccountAccessRole (plan .AccountAccess .ValueString ())
390- if err != nil {
391- resp .Diagnostics .AddError ("Failed to convert account access role" , err .Error ())
392- return
393- }
394-
395- spec .Access = & identityv1.Access {
396- AccountAccess : & identityv1.AccountAccess {
397- Role : role ,
398- },
399- NamespaceAccesses : namespaceAccesses ,
400- }
319+ spec , d := buildServiceAccountSpec (ctx , & plan )
320+ resp .Diagnostics .Append (d ... )
321+ if resp .Diagnostics .HasError () {
322+ return
401323 }
402324
403325 svcResp , err := r .client .CloudService ().UpdateServiceAccount (ctx , & cloudservicev1.UpdateServiceAccountRequest {
@@ -524,6 +446,57 @@ func getNamespaceAccessesFromServiceAccountModel(ctx context.Context, model *ser
524446 return namespaceAccesses , diags
525447}
526448
449+ func buildServiceAccountSpec (ctx context.Context , plan * serviceAccountResourceModel ) (* identityv1.ServiceAccountSpec , diag.Diagnostics ) {
450+ var diags diag.Diagnostics
451+
452+ description := ""
453+ if ! plan .Description .IsNull () {
454+ description = plan .Description .ValueString ()
455+ }
456+
457+ spec := & identityv1.ServiceAccountSpec {
458+ Name : plan .Name .ValueString (),
459+ Description : description ,
460+ }
461+
462+ // Handle namespace-scoped access
463+ if ! plan .NamespaceScopedAccess .IsNull () {
464+ namespaceScopedAccess , d := getNamespaceScopedAccessFromModel (ctx , plan )
465+ diags .Append (d ... )
466+ if diags .HasError () {
467+ return nil , diags
468+ }
469+ spec .NamespaceScopedAccess = namespaceScopedAccess
470+ } else {
471+ // Handle account-scoped access
472+ if plan .AccountAccess .IsNull () {
473+ diags .AddError ("Missing access configuration" , "Either account_access or namespace_scoped_access must be provided" )
474+ return nil , diags
475+ }
476+
477+ namespaceAccesses , d := getNamespaceAccessesFromServiceAccountModel (ctx , plan )
478+ diags .Append (d ... )
479+ if diags .HasError () {
480+ return nil , diags
481+ }
482+
483+ role , err := enums .ToAccountAccessRole (plan .AccountAccess .ValueString ())
484+ if err != nil {
485+ diags .AddError ("Failed to convert account access role" , err .Error ())
486+ return nil , diags
487+ }
488+
489+ spec .Access = & identityv1.Access {
490+ AccountAccess : & identityv1.AccountAccess {
491+ Role : role ,
492+ },
493+ NamespaceAccesses : namespaceAccesses ,
494+ }
495+ }
496+
497+ return spec , diags
498+ }
499+
527500func getNamespaceScopedAccessFromModel (ctx context.Context , model * serviceAccountResourceModel ) (* identityv1.NamespaceScopedAccess , diag.Diagnostics ) {
528501 var diags diag.Diagnostics
529502 var namespaceScopedAccessModel serviceAccountNamespaceAccessModel
0 commit comments