Skip to content

Commit 318164a

Browse files
authored
fix: re-order groups after api responses (#123)
1 parent 3913fba commit 318164a

File tree

10 files changed

+118
-12
lines changed

10 files changed

+118
-12
lines changed

internal/provider/env/aws/model.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,3 +310,18 @@ func maintenanceWindowsToModel(input []*sdk.AWSEnvSpecFragment_MaintenanceWindow
310310

311311
return maintenanceWindow
312312
}
313+
314+
func reorderNodeGroups(model []common.NodeGroupsModel, sdk []*client.AWSEnvSpecFragment_NodeGroups) []*client.AWSEnvSpecFragment_NodeGroups {
315+
orderedNodeGroups := make([]*client.AWSEnvSpecFragment_NodeGroups, 0, len(sdk))
316+
317+
for _, ng := range model {
318+
for _, apiGroup := range sdk {
319+
if ng.NodeType.ValueString() == apiGroup.NodeType {
320+
orderedNodeGroups = append(orderedNodeGroups, apiGroup)
321+
break
322+
}
323+
}
324+
}
325+
326+
return orderedNodeGroups
327+
}

internal/provider/env/aws/resource.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,14 @@ func (r *AWSEnvResource) Create(ctx context.Context, req resource.CreateRequest,
4848
return
4949
}
5050

51+
// Reorder node groups to respect order in the user's configuration
52+
apiResp.CreateAWSEnv.Spec.NodeGroups = reorderNodeGroups(data.NodeGroups, apiResp.CreateAWSEnv.Spec.NodeGroups)
5153
data.Id = data.Name
5254
data.Zones = common.ListToModel(apiResp.CreateAWSEnv.Spec.Zones)
5355
data.NodeGroups = nodeGroupsToModel(apiResp.CreateAWSEnv.Spec.NodeGroups)
5456
data.SpecRevision = types.Int64Value(apiResp.CreateAWSEnv.SpecRevision)
5557

5658
tflog.Trace(ctx, "created resource", map[string]interface{}{"name": envName})
57-
5859
diags = resp.State.Set(ctx, &data)
5960
resp.Diagnostics.Append(diags...)
6061
}
@@ -82,8 +83,11 @@ func (r *AWSEnvResource) Read(ctx context.Context, req resource.ReadRequest, res
8283
return
8384
}
8485

86+
// Reorder node groups to respect order in the user's configuration
87+
apiResp.AwsEnv.Spec.NodeGroups = reorderNodeGroups(data.NodeGroups, apiResp.AwsEnv.Spec.NodeGroups)
8588
data.toModel(*apiResp.AwsEnv)
8689
data.Id = data.Name
90+
8791
diags = resp.State.Set(ctx, &data)
8892
resp.Diagnostics.Append(diags...)
8993
}
@@ -108,12 +112,13 @@ func (r *AWSEnvResource) Update(ctx context.Context, req resource.UpdateRequest,
108112
return
109113
}
110114

111-
tflog.Trace(ctx, "updated resource", map[string]interface{}{"name": envName})
112-
115+
// Reorder node groups to respect order in the user's configuration
116+
apiResp.UpdateAWSEnv.Spec.NodeGroups = reorderNodeGroups(data.NodeGroups, apiResp.UpdateAWSEnv.Spec.NodeGroups)
113117
data.Zones = common.ListToModel(apiResp.UpdateAWSEnv.Spec.Zones)
114118
data.NodeGroups = nodeGroupsToModel(apiResp.UpdateAWSEnv.Spec.NodeGroups)
115119
data.SpecRevision = types.Int64Value(apiResp.UpdateAWSEnv.SpecRevision)
116120

121+
tflog.Trace(ctx, "updated resource", map[string]interface{}{"name": envName})
117122
diags = resp.State.Set(ctx, &data)
118123
resp.Diagnostics.Append(diags...)
119124
}

internal/provider/env/azure/model.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,3 +256,18 @@ func maintenanceWindowsToModel(input []*client.AzureEnvSpecFragment_MaintenanceW
256256

257257
return maintenanceWindow
258258
}
259+
260+
func reorderNodeGroups(model []common.NodeGroupsModel, sdk []*client.AzureEnvSpecFragment_NodeGroups) []*client.AzureEnvSpecFragment_NodeGroups {
261+
orderedNodeGroups := make([]*client.AzureEnvSpecFragment_NodeGroups, 0, len(sdk))
262+
263+
for _, ng := range model {
264+
for _, apiGroup := range sdk {
265+
if ng.NodeType.ValueString() == apiGroup.NodeType {
266+
orderedNodeGroups = append(orderedNodeGroups, apiGroup)
267+
break
268+
}
269+
}
270+
}
271+
272+
return orderedNodeGroups
273+
}

internal/provider/env/azure/resource.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,14 @@ func (r *AzureEnvResource) Create(ctx context.Context, req resource.CreateReques
4949
return
5050
}
5151

52-
tflog.Trace(ctx, "created resource", map[string]interface{}{"name": name})
52+
// Reorder node groups to respect order in the user's configuration
53+
apiResp.CreateAzureEnv.Spec.NodeGroups = reorderNodeGroups(data.NodeGroups, apiResp.CreateAzureEnv.Spec.NodeGroups)
5354
data.Id = data.Name
5455
data.Zones = common.ListToModel(apiResp.CreateAzureEnv.Spec.Zones)
5556
data.NodeGroups = nodeGroupsToModel(apiResp.CreateAzureEnv.Spec.NodeGroups)
5657
data.SpecRevision = types.Int64Value(apiResp.CreateAzureEnv.SpecRevision)
5758

59+
tflog.Trace(ctx, "created resource", map[string]interface{}{"name": name})
5860
diags = resp.State.Set(ctx, &data)
5961
resp.Diagnostics.Append(diags...)
6062
}
@@ -83,8 +85,11 @@ func (r *AzureEnvResource) Read(ctx context.Context, req resource.ReadRequest, r
8385
return
8486
}
8587

88+
// Reorder node groups to respect order in the user's configuration
89+
apiResp.AzureEnv.Spec.NodeGroups = reorderNodeGroups(data.NodeGroups, apiResp.AzureEnv.Spec.NodeGroups)
8690
data.toModel(*apiResp.AzureEnv)
8791
data.Id = data.Name
92+
8893
diags = resp.State.Set(ctx, &data)
8994
resp.Diagnostics.Append(diags...)
9095
}
@@ -109,11 +114,13 @@ func (r *AzureEnvResource) Update(ctx context.Context, req resource.UpdateReques
109114
return
110115
}
111116

112-
tflog.Trace(ctx, "updated resource", map[string]interface{}{"name": name})
117+
// Reorder node groups to respect order in the user's configuration
118+
apiResp.UpdateAzureEnv.Spec.NodeGroups = reorderNodeGroups(data.NodeGroups, apiResp.UpdateAzureEnv.Spec.NodeGroups)
113119
data.Zones = common.ListToModel(apiResp.UpdateAzureEnv.Spec.Zones)
114120
data.NodeGroups = nodeGroupsToModel(apiResp.UpdateAzureEnv.Spec.NodeGroups)
115121
data.SpecRevision = types.Int64Value(apiResp.UpdateAzureEnv.SpecRevision)
116122

123+
tflog.Trace(ctx, "updated resource", map[string]interface{}{"name": name})
117124
diags = resp.State.Set(ctx, &data)
118125
resp.Diagnostics.Append(diags...)
119126
}

internal/provider/env/gcp/model.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,3 +210,18 @@ func maintenanceWindowsToModel(input []*client.GCPEnvSpecFragment_MaintenanceWin
210210

211211
return maintenanceWindow
212212
}
213+
214+
func reorderNodeGroups(model []common.NodeGroupsModel, sdk []*client.GCPEnvSpecFragment_NodeGroups) []*client.GCPEnvSpecFragment_NodeGroups {
215+
orderedNodeGroups := make([]*client.GCPEnvSpecFragment_NodeGroups, 0, len(sdk))
216+
217+
for _, ng := range model {
218+
for _, apiGroup := range sdk {
219+
if ng.NodeType.ValueString() == apiGroup.NodeType {
220+
orderedNodeGroups = append(orderedNodeGroups, apiGroup)
221+
break
222+
}
223+
}
224+
}
225+
226+
return orderedNodeGroups
227+
}

internal/provider/env/gcp/resource.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,14 @@ func (r *GCPEnvResource) Create(ctx context.Context, req resource.CreateRequest,
4949
return
5050
}
5151

52-
tflog.Trace(ctx, "created resource", map[string]interface{}{"name": name})
52+
// Reorder node groups to respect order in the user's configuration
53+
apiResp.CreateGCPEnv.Spec.NodeGroups = reorderNodeGroups(data.NodeGroups, apiResp.CreateGCPEnv.Spec.NodeGroups)
5354
data.Id = data.Name
5455
data.Zones = common.ListToModel(apiResp.CreateGCPEnv.Spec.Zones)
5556
data.NodeGroups = nodeGroupsToModel(apiResp.CreateGCPEnv.Spec.NodeGroups)
5657
data.SpecRevision = types.Int64Value(apiResp.CreateGCPEnv.SpecRevision)
5758

59+
tflog.Trace(ctx, "created resource", map[string]interface{}{"name": name})
5860
diags = resp.State.Set(ctx, &data)
5961
resp.Diagnostics.Append(diags...)
6062
}
@@ -83,8 +85,11 @@ func (r *GCPEnvResource) Read(ctx context.Context, req resource.ReadRequest, res
8385
return
8486
}
8587

88+
// Reorder node groups to respect order in the user's configuration
89+
apiResp.GcpEnv.Spec.NodeGroups = reorderNodeGroups(data.NodeGroups, apiResp.GcpEnv.Spec.NodeGroups)
8690
data.toModel(*apiResp.GcpEnv)
8791
data.Id = data.Name
92+
8893
diags = resp.State.Set(ctx, &data)
8994
resp.Diagnostics.Append(diags...)
9095
}
@@ -109,11 +114,13 @@ func (r *GCPEnvResource) Update(ctx context.Context, req resource.UpdateRequest,
109114
return
110115
}
111116

112-
tflog.Trace(ctx, "updated resource", map[string]interface{}{"name": name})
117+
// Reorder node groups to respect order in the user's configuration
118+
apiResp.UpdateGCPEnv.Spec.NodeGroups = reorderNodeGroups(data.NodeGroups, apiResp.UpdateGCPEnv.Spec.NodeGroups)
113119
data.Zones = common.ListToModel(apiResp.UpdateGCPEnv.Spec.Zones)
114120
data.NodeGroups = nodeGroupsToModel(apiResp.UpdateGCPEnv.Spec.NodeGroups)
115121
data.SpecRevision = types.Int64Value(apiResp.UpdateGCPEnv.SpecRevision)
116122

123+
tflog.Trace(ctx, "updated resource", map[string]interface{}{"name": name})
117124
diags = resp.State.Set(ctx, &data)
118125
resp.Diagnostics.Append(diags...)
119126
}

internal/provider/env/hcloud/model.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,3 +253,18 @@ func wireguardPeersToModel(input []*client.HCloudEnvSpecFragment_WireguardPeers)
253253

254254
return peers
255255
}
256+
257+
func reorderNodeGroups(model []NodeGroupsModel, sdk []*client.HCloudEnvSpecFragment_NodeGroups) []*client.HCloudEnvSpecFragment_NodeGroups {
258+
orderedNodeGroups := make([]*client.HCloudEnvSpecFragment_NodeGroups, 0, len(sdk))
259+
260+
for _, ng := range model {
261+
for _, apiGroup := range sdk {
262+
if ng.NodeType.ValueString() == apiGroup.NodeType {
263+
orderedNodeGroups = append(orderedNodeGroups, apiGroup)
264+
break
265+
}
266+
}
267+
}
268+
269+
return orderedNodeGroups
270+
}

internal/provider/env/hcloud/resource.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,14 @@ func (r *HCloudEnvResource) Create(ctx context.Context, req resource.CreateReque
4949
return
5050
}
5151

52-
tflog.Trace(ctx, "created resource", map[string]interface{}{"name": name})
52+
// Reorder node groups to respect order in the user's configuration
53+
apiResp.CreateHCloudEnv.Spec.NodeGroups = reorderNodeGroups(data.NodeGroups, apiResp.CreateHCloudEnv.Spec.NodeGroups)
5354
data.Id = data.Name
5455
data.Locations = common.ListToModel(apiResp.CreateHCloudEnv.Spec.Locations)
5556
data.NodeGroups = nodeGroupsToModel(apiResp.CreateHCloudEnv.Spec.NodeGroups)
5657
data.SpecRevision = types.Int64Value(apiResp.CreateHCloudEnv.SpecRevision)
5758

59+
tflog.Trace(ctx, "created resource", map[string]interface{}{"name": name})
5860
diags = resp.State.Set(ctx, &data)
5961
resp.Diagnostics.Append(diags...)
6062
}
@@ -83,8 +85,11 @@ func (r *HCloudEnvResource) Read(ctx context.Context, req resource.ReadRequest,
8385
return
8486
}
8587

88+
// Reorder node groups to respect order in the user's configuration
89+
apiResp.HcloudEnv.Spec.NodeGroups = reorderNodeGroups(data.NodeGroups, apiResp.HcloudEnv.Spec.NodeGroups)
8690
data.toModel(*apiResp.HcloudEnv)
8791
data.Id = data.Name
92+
8893
diags = resp.State.Set(ctx, &data)
8994
resp.Diagnostics.Append(diags...)
9095
}
@@ -109,11 +114,13 @@ func (r *HCloudEnvResource) Update(ctx context.Context, req resource.UpdateReque
109114
return
110115
}
111116

112-
tflog.Trace(ctx, "updated resource", map[string]interface{}{"name": name})
117+
// Reorder node groups to respect order in the user's configuration
118+
apiResp.UpdateHCloudEnv.Spec.NodeGroups = reorderNodeGroups(data.NodeGroups, apiResp.UpdateHCloudEnv.Spec.NodeGroups)
113119
data.Locations = common.ListToModel(apiResp.UpdateHCloudEnv.Spec.Locations)
114120
data.NodeGroups = nodeGroupsToModel(apiResp.UpdateHCloudEnv.Spec.NodeGroups)
115121
data.SpecRevision = types.Int64Value(apiResp.UpdateHCloudEnv.SpecRevision)
116122

123+
tflog.Trace(ctx, "updated resource", map[string]interface{}{"name": name})
117124
diags = resp.State.Set(ctx, &data)
118125
resp.Diagnostics.Append(diags...)
119126
}

internal/provider/env/k8s/model.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,3 +407,18 @@ func maintenanceWindowsToModel(input []*client.K8SEnvSpecFragment_MaintenanceWin
407407

408408
return maintenanceWindow
409409
}
410+
411+
func reorderNodeGroups(model []NodeGroupsModel, sdk []*client.K8SEnvSpecFragment_NodeGroups) []*client.K8SEnvSpecFragment_NodeGroups {
412+
orderedNodeGroups := make([]*client.K8SEnvSpecFragment_NodeGroups, 0, len(sdk))
413+
414+
for _, ng := range model {
415+
for _, apiGroup := range sdk {
416+
if ng.NodeType.ValueString() == apiGroup.NodeType {
417+
orderedNodeGroups = append(orderedNodeGroups, apiGroup)
418+
break
419+
}
420+
}
421+
}
422+
423+
return orderedNodeGroups
424+
}

internal/provider/env/k8s/resource.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,14 @@ func (r *K8SEnvResource) Create(ctx context.Context, req resource.CreateRequest,
4848
return
4949
}
5050

51+
// Reorder node groups to respect order in the user's configuration
52+
apiResp.CreateK8SEnv.Spec.NodeGroups = reorderNodeGroups(data.NodeGroups, apiResp.CreateK8SEnv.Spec.NodeGroups)
5153
data.Id = data.Name
5254
data.NodeGroups = nodeGroupsToModel(apiResp.CreateK8SEnv.Spec.NodeGroups)
5355
data.SpecRevision = types.Int64Value(apiResp.CreateK8SEnv.SpecRevision)
54-
5556
data.toModel(data.Name.ValueString(), *apiResp.CreateK8SEnv.Spec)
56-
tflog.Trace(ctx, "created resource", map[string]interface{}{"name": name})
5757

58+
tflog.Trace(ctx, "created resource", map[string]interface{}{"name": name})
5859
diags = resp.State.Set(ctx, &data)
5960
resp.Diagnostics.Append(diags...)
6061
}
@@ -83,8 +84,11 @@ func (r *K8SEnvResource) Read(ctx context.Context, req resource.ReadRequest, res
8384
return
8485
}
8586

87+
// Reorder node groups to respect order in the user's configuration
88+
apiResp.K8sEnv.Spec.NodeGroups = reorderNodeGroups(data.NodeGroups, apiResp.K8sEnv.Spec.NodeGroups)
8689
data.toModel(apiResp.K8sEnv.Name, *apiResp.K8sEnv.Spec)
8790
data.Id = data.Name
91+
8892
diags = resp.State.Set(ctx, &data)
8993
resp.Diagnostics.Append(diags...)
9094
}
@@ -109,10 +113,11 @@ func (r *K8SEnvResource) Update(ctx context.Context, req resource.UpdateRequest,
109113
return
110114
}
111115

112-
tflog.Trace(ctx, "updated resource", map[string]interface{}{"name": name})
116+
apiResp.UpdateK8SEnv.Spec.NodeGroups = reorderNodeGroups(data.NodeGroups, apiResp.UpdateK8SEnv.Spec.NodeGroups)
113117
data.NodeGroups = nodeGroupsToModel(apiResp.UpdateK8SEnv.Spec.NodeGroups)
114118
data.SpecRevision = types.Int64Value(apiResp.UpdateK8SEnv.SpecRevision)
115119

120+
tflog.Trace(ctx, "updated resource", map[string]interface{}{"name": name})
116121
diags = resp.State.Set(ctx, &data)
117122
resp.Diagnostics.Append(diags...)
118123
}

0 commit comments

Comments
 (0)