Skip to content

Commit b96d7c7

Browse files
committed
use dependencies in flex cluster
1 parent ba2110f commit b96d7c7

File tree

2 files changed

+80
-42
lines changed

2 files changed

+80
-42
lines changed

internal/generated/controller/flexcluster/handler_v20250312.go

Lines changed: 78 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import (
2828

2929
"github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/controller/customresource"
3030
crapi "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/crapi"
31-
"github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/generated/references"
3231
akov2generated "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/nextapi/generated/v1"
3332
ctrlstate "github.com/mongodb/mongodb-atlas-kubernetes/v2/pkg/controller/state"
3433
result "github.com/mongodb/mongodb-atlas-kubernetes/v2/pkg/result"
@@ -51,35 +50,48 @@ func NewHandlerv20250312(kubeClient client.Client, atlasClient *v20250312sdk.API
5150
}
5251
}
5352

54-
// TODO: Autogenerate with Scaffolder
55-
func (h *Handlerv20250312) getGroupId(ctx context.Context, flexcluster *akov2generated.FlexCluster) (string, error) {
56-
groupID := ""
53+
func (h *Handlerv20250312) getDependencies(ctx context.Context, flexcluster *akov2generated.FlexCluster) ([]client.Object, error) {
54+
var result []client.Object
55+
56+
if flexcluster.Spec.V20250312.GroupRef != nil {
57+
group := &akov2generated.Group{}
58+
59+
err := h.kubeClient.Get(ctx, client.ObjectKey{
60+
Name: flexcluster.Spec.V20250312.GroupRef.Name,
61+
Namespace: flexcluster.GetNamespace(),
62+
}, group)
5763

58-
if flexcluster.Spec.V20250312.GroupId != nil {
59-
groupID = *flexcluster.Spec.V20250312.GroupId
60-
} else {
61-
var err error
62-
groupID, err = references.GetGroupID(
63-
ctx, h.kubeClient, flexcluster.Spec.V20250312.GroupRef, flexcluster.GetNamespace())
6464
if err != nil {
65-
return "", err
65+
return nil, fmt.Errorf("failed to get group %w", err)
6666
}
67+
68+
result = append(result, group)
6769
}
6870

69-
return groupID, nil
71+
return result, nil
7072
}
7173

7274
// HandleInitial handles the initial state for version v20250312
7375
func (h *Handlerv20250312) HandleInitial(ctx context.Context, flexcluster *akov2generated.FlexCluster) (ctrlstate.Result, error) {
74-
groupID, err := h.getGroupId(ctx, flexcluster)
76+
deps, err := h.getDependencies(ctx, flexcluster)
7577
if err != nil {
76-
return result.Error(state.StateInitial, reconcile.TerminalError(err))
78+
return result.Error(state.StateInitial, fmt.Errorf("failed to get dependencies: %w", err))
7779
}
78-
flexClusterRequest := v20250312sdk.FlexClusterDescriptionCreate20241113{}
79-
if err := h.translator.ToAPI(&flexClusterRequest, flexcluster); err != nil {
80-
return result.Error(state.StateInitial, fmt.Errorf("failed to translate flex create request: %w", err))
80+
81+
body := &v20250312sdk.FlexClusterDescriptionCreate20241113{}
82+
params := &v20250312sdk.CreateFlexClusterApiParams{
83+
FlexClusterDescriptionCreate20241113: body,
8184
}
82-
atlasFlexCluster, _, err := h.atlasClient.FlexClustersApi.CreateFlexCluster(ctx, groupID, &flexClusterRequest).Execute()
85+
86+
if err := h.translator.ToAPI(params, flexcluster, deps...); err != nil {
87+
return result.Error(state.StateInitial, fmt.Errorf("failed to translate flex api params: %w", err))
88+
}
89+
90+
if err := h.translator.ToAPI(body, flexcluster, deps...); err != nil {
91+
return result.Error(state.StateInitial, fmt.Errorf("failed to translate flex create description: %w", err))
92+
}
93+
94+
atlasFlexCluster, _, err := h.atlasClient.FlexClustersApi.CreateFlexClusterWithParams(ctx, params).Execute()
8395
if err != nil {
8496
return result.Error(state.StateInitial, fmt.Errorf("failed to create flex cluster: %w", err))
8597
}
@@ -109,7 +121,7 @@ func (h *Handlerv20250312) HandleImportRequested(ctx context.Context, flexcluste
109121
flexClusterCopy := flexcluster.DeepCopy()
110122
flexClusterCopy.Spec.V20250312.Entry.Name = externalName
111123
flexClusterCopy.Spec.V20250312.GroupId = &externalGroupID
112-
_, err := h.getToPatchStatus(ctx, flexClusterCopy)
124+
_, err := h.patchStatus(ctx, flexClusterCopy)
113125
if err != nil {
114126
return result.Error(state.StateImportRequested, err)
115127
}
@@ -151,12 +163,17 @@ func (h *Handlerv20250312) HandleDeletionRequested(ctx context.Context, flexclus
151163
return result.NextState(state.StateDeleted, "Flex Cluster is unamanged.")
152164
}
153165

154-
groupID, err := h.getGroupId(ctx, flexcluster)
166+
deps, err := h.getDependencies(ctx, flexcluster)
155167
if err != nil {
156-
return result.Error(state.StateInitial, reconcile.TerminalError(err))
168+
return result.Error(state.StateDeletionRequested, fmt.Errorf("failed to get dependencies: %w", err))
169+
}
170+
171+
params := &v20250312sdk.DeleteFlexClusterApiParams{}
172+
if err := h.translator.ToAPI(params, flexcluster, deps...); err != nil {
173+
return result.Error(state.StateDeletionRequested, fmt.Errorf("failed to translate flex api params: %w", err))
157174
}
158-
_, err = h.atlasClient.FlexClustersApi.DeleteFlexCluster(
159-
ctx, groupID, flexcluster.Spec.V20250312.Entry.Name).Execute()
175+
176+
_, err = h.atlasClient.FlexClustersApi.DeleteFlexClusterWithParams(ctx, params).Execute()
160177

161178
switch {
162179
case v20250312sdk.IsErrorCode(err, "CLUSTER_NOT_FOUND"):
@@ -170,12 +187,17 @@ func (h *Handlerv20250312) HandleDeletionRequested(ctx context.Context, flexclus
170187

171188
// HandleDeleting handles the deleting state for version v20250312
172189
func (h *Handlerv20250312) HandleDeleting(ctx context.Context, flexcluster *akov2generated.FlexCluster) (ctrlstate.Result, error) {
173-
groupID, err := h.getGroupId(ctx, flexcluster)
190+
deps, err := h.getDependencies(ctx, flexcluster)
174191
if err != nil {
175-
return result.Error(state.StateInitial, reconcile.TerminalError(err))
192+
return result.Error(state.StateDeleting, fmt.Errorf("failed to get dependencies: %w", err))
176193
}
177-
_, _, err = h.atlasClient.FlexClustersApi.GetFlexCluster(
178-
ctx, groupID, flexcluster.Spec.V20250312.Entry.Name).Execute()
194+
195+
params := &v20250312sdk.GetFlexClusterApiParams{}
196+
if err := h.translator.ToAPI(params, flexcluster, deps...); err != nil {
197+
return result.Error(state.StateDeleting, fmt.Errorf("failed to translate flex api params: %w", err))
198+
}
199+
200+
_, _, err = h.atlasClient.FlexClustersApi.GetFlexClusterWithParams(ctx, params).Execute()
179201
switch {
180202
case v20250312sdk.IsErrorCode(err, "CLUSTER_NOT_FOUND"):
181203
return result.NextState(state.StateDeleted, "Deleted")
@@ -197,7 +219,7 @@ func (h *Handlerv20250312) SetupWithManager(mgr controllerruntime.Manager, rec r
197219

198220
// HandleUpserting handles the creating and updating state for flex version v20250312
199221
func (h *Handlerv20250312) handleUpserting(ctx context.Context, flexcluster *akov2generated.FlexCluster, currentState, finalState state.ResourceState) (ctrlstate.Result, error) {
200-
atlasFlexCluster, err := h.getToPatchStatus(ctx, flexcluster)
222+
atlasFlexCluster, err := h.patchStatus(ctx, flexcluster)
201223
if err != nil {
202224
return result.Error(currentState, err)
203225
}
@@ -218,16 +240,27 @@ func (h *Handlerv20250312) handleIdle(ctx context.Context, flexcluster *akov2gen
218240
return result.NextState(currentState, "Flex cluster up to date. No update required.")
219241
}
220242

221-
groupID, err := h.getGroupId(ctx, flexcluster)
243+
deps, err := h.getDependencies(ctx, flexcluster)
222244
if err != nil {
223-
return result.Error(state.StateInitial, reconcile.TerminalError(err))
245+
return result.Error(currentState, fmt.Errorf("failed to get dependencies: %w", err))
246+
}
247+
248+
body := &v20250312sdk.FlexClusterDescriptionUpdate20241113{}
249+
params := &v20250312sdk.UpdateFlexClusterApiParams{
250+
FlexClusterDescriptionUpdate20241113: body,
251+
}
252+
253+
// translate parameters
254+
if err := h.translator.ToAPI(params, flexcluster, deps...); err != nil {
255+
return result.Error(currentState, fmt.Errorf("failed to translate update flex cluster parameters: %w", err))
224256
}
225-
flexClusterUpdate := v20250312sdk.FlexClusterDescriptionUpdate20241113{}
226-
if err := h.translator.ToAPI(&flexClusterUpdate, flexcluster); err != nil {
227-
return result.Error(state.StateInitial, fmt.Errorf("failed to translate update flex cluster request: %w", err))
257+
258+
// translate body
259+
if err := h.translator.ToAPI(body, flexcluster, deps...); err != nil {
260+
return result.Error(currentState, fmt.Errorf("failed to translate update flex cluster description: %w", err))
228261
}
229-
atlasFlexCluster, _, err := h.atlasClient.FlexClustersApi.UpdateFlexCluster(
230-
ctx, groupID, flexcluster.Spec.V20250312.Entry.Name, &flexClusterUpdate).Execute()
262+
263+
atlasFlexCluster, _, err := h.atlasClient.FlexClustersApi.UpdateFlexClusterWithParams(ctx, params).Execute()
231264
if err != nil {
232265
return result.Error(currentState, fmt.Errorf("failed to get update cluster: %w", err))
233266
}
@@ -243,18 +276,23 @@ func (h *Handlerv20250312) handleIdle(ctx context.Context, flexcluster *akov2gen
243276
return result.NextState(finalState, "Updating Flex Cluster.")
244277
}
245278

246-
func (h *Handlerv20250312) getToPatchStatus(ctx context.Context, flexcluster *akov2generated.FlexCluster) (*v20250312sdk.FlexClusterDescription20241113, error) {
247-
groupID, err := h.getGroupId(ctx, flexcluster)
279+
func (h *Handlerv20250312) patchStatus(ctx context.Context, flexcluster *akov2generated.FlexCluster) (*v20250312sdk.FlexClusterDescription20241113, error) {
280+
deps, err := h.getDependencies(ctx, flexcluster)
248281
if err != nil {
249282
return nil, err
250283
}
251-
atlasFlexCluster, _, err := h.atlasClient.FlexClustersApi.GetFlexCluster(
252-
ctx, groupID, flexcluster.Spec.V20250312.Entry.Name).Execute()
284+
params := &v20250312sdk.GetFlexClusterApiParams{}
285+
if err := h.translator.ToAPI(params, flexcluster, deps...); err != nil {
286+
return nil, fmt.Errorf("failed to translate update flex cluster parameters: %w", err)
287+
}
288+
289+
atlasFlexCluster, _, err := h.atlasClient.FlexClustersApi.GetFlexClusterWithParams(ctx, params).Execute()
253290
if err != nil {
254291
return nil, fmt.Errorf("failed to get cluster: %w", err)
255292
}
293+
256294
flexclusterCopy := flexcluster.DeepCopy()
257-
if _, err := h.translator.FromAPI(flexclusterCopy, atlasFlexCluster); err != nil {
295+
if _, err := h.translator.FromAPI(flexclusterCopy, atlasFlexCluster, deps...); err != nil {
258296
return nil, fmt.Errorf("failed to translate get cluster response: %w", err)
259297
}
260298

internal/generated/references/references.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ func GetGroupID(ctx context.Context, c client.Client, groupRef *k8s.LocalReferen
3434

3535
group := &akov2generated.Group{}
3636
err := c.Get(ctx, client.ObjectKey{
37-
Namespace: groupRef.Name,
38-
Name: namespace,
37+
Name: groupRef.Name,
38+
Namespace: namespace,
3939
}, group)
4040

4141
if err != nil {

0 commit comments

Comments
 (0)