Skip to content

Commit 9a22a47

Browse files
committed
consolidate
1 parent 5bcb709 commit 9a22a47

File tree

1 file changed

+59
-86
lines changed

1 file changed

+59
-86
lines changed

internal/provider/service_account_resource.go

Lines changed: 59 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
527500
func getNamespaceScopedAccessFromModel(ctx context.Context, model *serviceAccountResourceModel) (*identityv1.NamespaceScopedAccess, diag.Diagnostics) {
528501
var diags diag.Diagnostics
529502
var namespaceScopedAccessModel serviceAccountNamespaceAccessModel

0 commit comments

Comments
 (0)