Skip to content

Commit 549013e

Browse files
committed
fix(lh-87768): sort users returned by SCC API to prevent inconsistent plan errors
1 parent 7789968 commit 549013e

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

provider/internal/msp/msp_tenant_users/resource.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
1616
"github.com/hashicorp/terraform-plugin-framework/types"
1717
"github.com/hashicorp/terraform-plugin-log/tflog"
18+
"sort"
1819
)
1920

2021
func NewMspManagedTenantUsersResource() resource.Resource { return &MspManagedTenantUsersResource{} }
@@ -23,6 +24,19 @@ type MspManagedTenantUsersResource struct {
2324
client *cdoClient.Client
2425
}
2526

27+
func sortUsersToOrderInPlanData(users []User, planData *MspManagedTenantUsersResourceModel) *[]User {
28+
userOrder := make(map[string]int)
29+
for i, user := range planData.Users {
30+
userOrder[user.Username.ValueString()] = i
31+
}
32+
33+
sort.Slice(users, func(i, j int) bool {
34+
return userOrder[users[i].Username.ValueString()] < userOrder[users[j].Username.ValueString()]
35+
})
36+
37+
return &users
38+
}
39+
2640
func (resource *MspManagedTenantUsersResource) Schema(ctx context.Context, request resource.SchemaRequest, response *resource.SchemaResponse) {
2741
response.Schema = schema.Schema{
2842
MarkdownDescription: "Provides a resource to add users to an MSP managed tenant.",
@@ -85,7 +99,7 @@ func (resource *MspManagedTenantUsersResource) Create(ctx context.Context, reque
8599
return
86100
}
87101

88-
planData.Users = *resource.transformApiResponseToPlan(createdUserDetails)
102+
planData.Users = *sortUsersToOrderInPlanData(*resource.transformApiResponseToPlan(createdUserDetails), &planData)
89103

90104
response.Diagnostics.Append(response.State.Set(ctx, &planData)...)
91105
}
@@ -101,7 +115,7 @@ func (resource *MspManagedTenantUsersResource) Read(ctx context.Context, request
101115
return
102116
}
103117

104-
stateData.Users = *resource.transformApiResponseToPlan(userDetails)
118+
stateData.Users = *sortUsersToOrderInPlanData(*resource.transformApiResponseToPlan(userDetails), &stateData)
105119
response.Diagnostics.Append(response.State.Set(ctx, &stateData)...)
106120
}
107121

0 commit comments

Comments
 (0)