fix: sort user roles to prevent state change
This commit is contained in:
parent
38d650e1c7
commit
01d4ca8c5e
10 changed files with 190 additions and 46 deletions
|
|
@ -5,6 +5,7 @@ import (
|
|||
_ "embed"
|
||||
"fmt"
|
||||
"math"
|
||||
"slices"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
|
@ -29,11 +30,12 @@ import (
|
|||
|
||||
var (
|
||||
// Ensure the implementation satisfies the expected interfaces.
|
||||
_ resource.Resource = &userResource{}
|
||||
_ resource.ResourceWithConfigure = &userResource{}
|
||||
_ resource.ResourceWithImportState = &userResource{}
|
||||
_ resource.ResourceWithModifyPlan = &userResource{}
|
||||
_ resource.ResourceWithIdentity = &userResource{}
|
||||
_ resource.Resource = &userResource{}
|
||||
_ resource.ResourceWithConfigure = &userResource{}
|
||||
_ resource.ResourceWithImportState = &userResource{}
|
||||
_ resource.ResourceWithModifyPlan = &userResource{}
|
||||
_ resource.ResourceWithIdentity = &userResource{}
|
||||
_ resource.ResourceWithValidateConfig = &userResource{}
|
||||
|
||||
// Error message constants
|
||||
extractErrorSummary = "extracting failed"
|
||||
|
|
@ -138,6 +140,39 @@ func (r *userResource) Schema(ctx context.Context, _ resource.SchemaRequest, res
|
|||
resp.Schema = s
|
||||
}
|
||||
|
||||
func (r *userResource) ValidateConfig(
|
||||
ctx context.Context,
|
||||
req resource.ValidateConfigRequest,
|
||||
resp *resource.ValidateConfigResponse,
|
||||
) {
|
||||
var data resourceModel
|
||||
|
||||
resp.Diagnostics.Append(req.Config.Get(ctx, &data)...)
|
||||
if resp.Diagnostics.HasError() {
|
||||
return
|
||||
}
|
||||
|
||||
var roles []string
|
||||
diags := data.Roles.ElementsAs(ctx, &roles, false)
|
||||
resp.Diagnostics.Append(diags...)
|
||||
if diags.HasError() {
|
||||
return
|
||||
}
|
||||
|
||||
var resRoles []string
|
||||
for _, role := range roles {
|
||||
if slices.Contains(resRoles, role) {
|
||||
resp.Diagnostics.AddAttributeError(
|
||||
path.Root("roles"),
|
||||
"Attribute Configuration Error",
|
||||
"defined roles MUST NOT contain duplicates",
|
||||
)
|
||||
return
|
||||
}
|
||||
resRoles = append(resRoles, role)
|
||||
}
|
||||
}
|
||||
|
||||
// Create creates the resource and sets the initial Terraform state.
|
||||
func (r *userResource) Create(
|
||||
ctx context.Context,
|
||||
|
|
@ -712,5 +747,6 @@ func (r *userResource) expandRoles(ctx context.Context, rolesSet types.List, dia
|
|||
}
|
||||
var roles []string
|
||||
diags.Append(rolesSet.ElementsAs(ctx, &roles, false)...)
|
||||
slices.Sort(roles)
|
||||
return roles
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue