Skip to content

Commit 7440056

Browse files
authored
Fix translator provisioning (#2953)
Signed-off-by: jose.vazquez <[email protected]>
1 parent 2f94bf7 commit 7440056

25 files changed

+256
-1033
lines changed

internal/generated/controller/cluster/cluster_controller.go

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
package cluster
1616

1717
import (
18+
"fmt"
19+
1820
v20250312sdk "go.mongodb.org/atlas-sdk/v20250312006/admin"
1921
zap "go.uber.org/zap"
2022
client "sigs.k8s.io/controller-runtime/pkg/client"
@@ -24,10 +26,21 @@ import (
2426
atlas "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/controller/atlas"
2527
reconciler "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/controller/reconciler"
2628
crapi "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/crapi"
29+
crds "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/generated/crds"
2730
akov2generated "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/nextapi/generated/v1"
2831
ctrlstate "github.com/mongodb/mongodb-atlas-kubernetes/v2/pkg/controller/state"
2932
)
3033

34+
const (
35+
// crdVersion of the controler
36+
crdVersion = "v1"
37+
)
38+
39+
var (
40+
// sdkVersions supported by this controller
41+
sdkVersions = []string{"v20250312"}
42+
)
43+
3144
// +kubebuilder:rbac:groups=atlas.generated.mongodb.com,resources=clusters,verbs=get;list;watch;create;update;patch;delete
3245
// +kubebuilder:rbac:groups=atlas.generated.mongodb.com,resources=clusters/status,verbs=get;update;patch
3346
// +kubebuilder:rbac:groups=atlas.generated.mongodb.com,resources=clusters/finalizers,verbs=update
@@ -45,10 +58,26 @@ type Handler struct {
4558
reconciler.AtlasReconciler
4659
deletionProtection bool
4760
predicates []predicate.Predicate
61+
translators map[string]crapi.Translator
4862
handlerv20250312 ctrlstate.VersionedHandlerFunc[v20250312sdk.APIClient, akov2generated.Cluster]
4963
}
5064

51-
func NewClusterReconciler(c cluster.Cluster, atlasProvider atlas.Provider, logger *zap.Logger, globalSecretRef client.ObjectKey, deletionProtection bool, reapplySupport bool, predicates []predicate.Predicate) *ctrlstate.Reconciler[akov2generated.Cluster] {
65+
func NewClusterReconciler(
66+
c cluster.Cluster,
67+
atlasProvider atlas.Provider,
68+
logger *zap.Logger,
69+
globalSecretRef client.ObjectKey,
70+
deletionProtection bool,
71+
reapplySupport bool,
72+
predicates []predicate.Predicate) (*ctrlstate.Reconciler[akov2generated.Cluster], error) {
73+
crd, err := crds.EmbeddedCRD("Cluster")
74+
if err == nil {
75+
return nil, fmt.Errorf("failed to read CRD for Cluster: %w", err)
76+
}
77+
translators, err := crapi.NewPerVersionTranslators(crd, crdVersion, sdkVersions...)
78+
if err == nil {
79+
return nil, fmt.Errorf("failed to get translator set for Cluster: %w", err)
80+
}
5281
// Create main handler dispatcher
5382
clusterHandler := &Handler{
5483
AtlasReconciler: reconciler.AtlasReconciler{
@@ -60,10 +89,11 @@ func NewClusterReconciler(c cluster.Cluster, atlasProvider atlas.Provider, logge
6089
deletionProtection: deletionProtection,
6190
handlerv20250312: handlerv20250312Func,
6291
predicates: predicates,
92+
translators: translators,
6393
}
6494

65-
return ctrlstate.NewStateReconciler(clusterHandler, ctrlstate.WithCluster[akov2generated.Cluster](c), ctrlstate.WithReapplySupport[akov2generated.Cluster](reapplySupport))
95+
return ctrlstate.NewStateReconciler(clusterHandler, ctrlstate.WithCluster[akov2generated.Cluster](c), ctrlstate.WithReapplySupport[akov2generated.Cluster](reapplySupport)), nil
6696
}
67-
func handlerv20250312Func(kubeClient client.Client, atlasClient *v20250312sdk.APIClient, translatorRequest *crapi.Request, deletionProtection bool) ctrlstate.StateHandler[akov2generated.Cluster] {
68-
return NewHandlerv20250312(kubeClient, atlasClient, translatorRequest, deletionProtection)
97+
func handlerv20250312Func(kubeClient client.Client, atlasClient *v20250312sdk.APIClient, translator crapi.Translator, deletionProtection bool) ctrlstate.StateHandler[akov2generated.Cluster] {
98+
return NewHandlerv20250312(kubeClient, atlasClient, translator, deletionProtection)
6999
}

internal/generated/controller/cluster/handler.go

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ package cluster
1616

1717
import (
1818
"context"
19+
"errors"
1920
"fmt"
2021

21-
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2222
controllerruntime "sigs.k8s.io/controller-runtime"
2323
builder "sigs.k8s.io/controller-runtime/pkg/builder"
2424
client "sigs.k8s.io/controller-runtime/pkg/client"
@@ -29,7 +29,6 @@ import (
2929

3030
atlas "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/controller/atlas"
3131
reconciler "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/controller/reconciler"
32-
crapi "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/crapi"
3332
indexers "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/generated/indexers"
3433
indexer "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/indexer"
3534
akov2generated "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/nextapi/generated/v1"
@@ -49,12 +48,12 @@ func (h *Handler) getHandlerForResource(ctx context.Context, cluster *akov2gener
4948
var selectedHandler ctrlstate.StateHandler[akov2generated.Cluster]
5049

5150
if cluster.Spec.V20250312 != nil {
52-
translationReq, err := getTranslationRequest(ctx, h.Client, "clusters.atlas.generated.mongodb.com", "v1", "v20250312")
53-
if err != nil {
54-
return nil, err
51+
translator, ok := h.translators["v20250312"]
52+
if ok != true {
53+
return nil, errors.New("unsupported version v20250312 set in CR")
5554
}
5655
versionCount++
57-
selectedHandler = h.handlerv20250312(h.Client, atlasClients.SdkClient20250312006, translationReq, h.deletionProtection)
56+
selectedHandler = h.handlerv20250312(h.Client, atlasClients.SdkClient20250312006, translator, h.deletionProtection)
5857
}
5958

6059
if versionCount == 0 {
@@ -186,23 +185,3 @@ func (h *Handler) getSDKClientSet(ctx context.Context, cluster *akov2generated.C
186185

187186
return clientSet, nil
188187
}
189-
190-
// getTranslationRequest creates a translation request for converting entities between API and AKO.
191-
// This is a package-level function that can be called from any handler.
192-
func getTranslationRequest(ctx context.Context, kubeClient client.Client, crdName string, storageVersion string, targetVersion string) (*crapi.Request, error) {
193-
crd := &apiextensionsv1.CustomResourceDefinition{}
194-
err := kubeClient.Get(ctx, client.ObjectKey{Name: crdName}, crd)
195-
if err != nil {
196-
return nil, fmt.Errorf("failed to resolve CRD %s: %w", crdName, err)
197-
}
198-
199-
translator, err := crapi.NewTranslator(crd, storageVersion, targetVersion)
200-
if err != nil {
201-
return nil, fmt.Errorf("failed to setup translator: %w", err)
202-
}
203-
204-
return &crapi.Request{
205-
Dependencies: nil,
206-
Translator: translator,
207-
}, nil
208-
}

internal/generated/controller/cluster/handler_v20250312.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
controller "sigs.k8s.io/controller-runtime/pkg/controller"
2525
reconcile "sigs.k8s.io/controller-runtime/pkg/reconcile"
2626

27-
translate "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/crapi"
27+
crapi "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/crapi"
2828
akov2generated "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/nextapi/generated/v1"
2929
ctrlstate "github.com/mongodb/mongodb-atlas-kubernetes/v2/pkg/controller/state"
3030
result "github.com/mongodb/mongodb-atlas-kubernetes/v2/pkg/result"
@@ -34,16 +34,16 @@ import (
3434
type Handlerv20250312 struct {
3535
kubeClient client.Client
3636
atlasClient *v20250312sdk.APIClient
37-
translationRequest *translate.Request
37+
translator crapi.Translator
3838
deletionProtection bool
3939
}
4040

41-
func NewHandlerv20250312(kubeClient client.Client, atlasClient *v20250312sdk.APIClient, translationRequest *translate.Request, deletionProtection bool) *Handlerv20250312 {
41+
func NewHandlerv20250312(kubeClient client.Client, atlasClient *v20250312sdk.APIClient, translator crapi.Translator, deletionProtection bool) *Handlerv20250312 {
4242
return &Handlerv20250312{
4343
atlasClient: atlasClient,
4444
deletionProtection: deletionProtection,
4545
kubeClient: kubeClient,
46-
translationRequest: translationRequest,
46+
translator: translator,
4747
}
4848
}
4949

internal/generated/controller/customrole/customrole_controller.go

Lines changed: 0 additions & 69 deletions
This file was deleted.

0 commit comments

Comments
 (0)