Skip to content

Commit 02d62bb

Browse files
committed
Simplify resolution
Signed-off-by: jose.vazquez <[email protected]>
1 parent c208832 commit 02d62bb

File tree

11 files changed

+37
-172
lines changed

11 files changed

+37
-172
lines changed

internal/mocks/atlas/provider.go

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@ import (
1212
)
1313

1414
type TestProvider struct {
15-
ClientFunc func(secretRef *client.ObjectKey, log *zap.SugaredLogger) (*mongodbatlas.Client, string, error)
16-
SdkClientFunc func(secretRef *client.ObjectKey, log *zap.SugaredLogger) (*admin.APIClient, string, error)
17-
IsCloudGovFunc func() bool
18-
IsSupportedFunc func() bool
19-
GlobalFallbackSecretFunc func() *client.ObjectKey
15+
ClientFunc func(secretRef *client.ObjectKey, log *zap.SugaredLogger) (*mongodbatlas.Client, string, error)
16+
SdkClientFunc func(secretRef *client.ObjectKey, log *zap.SugaredLogger) (*admin.APIClient, string, error)
17+
IsCloudGovFunc func() bool
18+
IsSupportedFunc func() bool
2019
}
2120

2221
func (f *TestProvider) Client(_ context.Context, secretRef *client.ObjectKey, log *zap.SugaredLogger) (*mongodbatlas.Client, string, error) {
@@ -34,7 +33,3 @@ func (f *TestProvider) IsCloudGov() bool {
3433
func (f *TestProvider) IsResourceSupported(_ api.AtlasCustomResource) bool {
3534
return f.IsSupportedFunc()
3635
}
37-
38-
func (f *TestProvider) GlobalFallbackSecret() *client.ObjectKey {
39-
return f.GlobalFallbackSecretFunc()
40-
}

internal/translation/dbuser/dbuser_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,12 @@ import (
2222

2323
func TestNewAtlasDatabaseUsersService(t *testing.T) {
2424
ctx := context.Background()
25-
secretRef := &types.NamespacedName{}
2625
provider := &atlas.TestProvider{
2726
SdkClientFunc: func(_ *client.ObjectKey, _ *zap.SugaredLogger) (*admin.APIClient, string, error) {
2827
return &admin.APIClient{}, "", nil
2928
},
30-
GlobalFallbackSecretFunc: func() *client.ObjectKey { return secretRef },
3129
}
30+
secretRef := &types.NamespacedName{}
3231
log := zap.S()
3332
users, err := NewAtlasDatabaseUsersService(ctx, provider, secretRef, log)
3433
require.NoError(t, err)
@@ -38,13 +37,12 @@ func TestNewAtlasDatabaseUsersService(t *testing.T) {
3837
func TestFailedNewAtlasDatabaseUsersService(t *testing.T) {
3938
expectedErr := errors.New("fake error")
4039
ctx := context.Background()
41-
secretRef := &types.NamespacedName{}
4240
provider := &atlas.TestProvider{
4341
SdkClientFunc: func(_ *client.ObjectKey, _ *zap.SugaredLogger) (*admin.APIClient, string, error) {
4442
return nil, "", expectedErr
4543
},
46-
GlobalFallbackSecretFunc: func() *client.ObjectKey { return secretRef },
4744
}
45+
secretRef := &types.NamespacedName{}
4846
log := zap.S()
4947
users, err := NewAtlasDatabaseUsersService(ctx, provider, secretRef, log)
5048
require.Nil(t, users)

pkg/controller/atlas/provider.go

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,12 @@ type Provider interface {
3232
SdkClient(ctx context.Context, secretRef *client.ObjectKey, log *zap.SugaredLogger) (*admin.APIClient, string, error)
3333
IsCloudGov() bool
3434
IsResourceSupported(resource api.AtlasCustomResource) bool
35-
GlobalFallbackSecret() *client.ObjectKey
3635
}
3736

3837
type ProductionProvider struct {
3938
k8sClient client.Client
4039
domain string
41-
globalSecretRef *client.ObjectKey
40+
globalSecretRef client.ObjectKey
4241
}
4342

4443
type credentialsSecret struct {
@@ -47,7 +46,7 @@ type credentialsSecret struct {
4746
PrivateKey string
4847
}
4948

50-
func NewProductionProvider(atlasDomain string, globalSecretRef *client.ObjectKey, k8sClient client.Client) *ProductionProvider {
49+
func NewProductionProvider(atlasDomain string, globalSecretRef client.ObjectKey, k8sClient client.Client) *ProductionProvider {
5150
return &ProductionProvider{
5251
k8sClient: k8sClient,
5352
domain: atlasDomain,
@@ -94,7 +93,7 @@ func (p *ProductionProvider) IsResourceSupported(resource api.AtlasCustomResourc
9493
}
9594

9695
func (p *ProductionProvider) Client(ctx context.Context, secretRef *client.ObjectKey, log *zap.SugaredLogger) (*mongodbatlas.Client, string, error) {
97-
secretData, err := getSecrets(ctx, p.k8sClient, secretRef)
96+
secretData, err := getSecrets(ctx, p.k8sClient, secretRef, &p.globalSecretRef)
9897
if err != nil {
9998
return nil, "", err
10099
}
@@ -114,7 +113,7 @@ func (p *ProductionProvider) Client(ctx context.Context, secretRef *client.Objec
114113
}
115114

116115
func (p *ProductionProvider) SdkClient(ctx context.Context, secretRef *client.ObjectKey, log *zap.SugaredLogger) (*admin.APIClient, string, error) {
117-
secretData, err := getSecrets(ctx, p.k8sClient, secretRef)
116+
secretData, err := getSecrets(ctx, p.k8sClient, secretRef, &p.globalSecretRef)
118117
if err != nil {
119118
return nil, "", err
120119
}
@@ -134,14 +133,11 @@ func (p *ProductionProvider) SdkClient(ctx context.Context, secretRef *client.Ob
134133
return c, secretData.OrgID, nil
135134
}
136135

137-
func (p *ProductionProvider) GlobalFallbackSecret() *client.ObjectKey {
138-
return p.globalSecretRef
139-
}
140-
141-
func getSecrets(ctx context.Context, k8sClient client.Client, secretRef *client.ObjectKey) (*credentialsSecret, error) {
136+
func getSecrets(ctx context.Context, k8sClient client.Client, secretRef, fallbackRef *client.ObjectKey) (*credentialsSecret, error) {
142137
if secretRef == nil {
143-
return nil, fmt.Errorf("secret reference cannot be nil")
138+
secretRef = fallbackRef
144139
}
140+
145141
secret := &corev1.Secret{}
146142
if err := k8sClient.Get(ctx, *secretRef, secret); err != nil {
147143
return nil, fmt.Errorf("failed to read Atlas API credentials from the secret %s: %w", secretRef.String(), err)

pkg/controller/atlas/provider_test.go

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
"github.com/mongodb/mongodb-atlas-kubernetes/v2/pkg/version"
2121
)
2222

23-
func TestProviderClient(t *testing.T) {
23+
func TestProvider_Client(t *testing.T) {
2424
secret := &corev1.Secret{
2525
ObjectMeta: metav1.ObjectMeta{
2626
Name: "api-secret",
@@ -44,19 +44,19 @@ func TestProviderClient(t *testing.T) {
4444
WithObjects(secret).
4545
Build()
4646

47-
t.Run("should return Atlas API client and organization id from the passed in connection secret even with the global secret unset", func(t *testing.T) {
48-
p := NewProductionProvider("https://cloud.mongodb.com/", nil, k8sClient)
47+
t.Run("should return Atlas API client and organization id using global secret", func(t *testing.T) {
48+
p := NewProductionProvider("https://cloud.mongodb.com/", client.ObjectKey{Name: "api-secret", Namespace: "default"}, k8sClient)
4949

50-
c, id, err := p.Client(context.Background(), objectKey(secret), zaptest.NewLogger(t).Sugar())
50+
c, id, err := p.Client(context.Background(), nil, zaptest.NewLogger(t).Sugar())
5151
assert.NoError(t, err)
5252
assert.Equal(t, "1234567890", id)
5353
assert.NotNil(t, c)
5454
})
5555

56-
t.Run("should return Atlas API client and organization id from the passed in connection secret even with the global secret set", func(t *testing.T) {
57-
p := NewProductionProvider("https://cloud.mongodb.com/", &client.ObjectKey{Name: "global-secret", Namespace: "default"}, k8sClient)
56+
t.Run("should return Atlas API client and organization id using connection secret", func(t *testing.T) {
57+
p := NewProductionProvider("https://cloud.mongodb.com/", client.ObjectKey{Name: "global-secret", Namespace: "default"}, k8sClient)
5858

59-
c, id, err := p.Client(context.Background(), objectKey(secret), zaptest.NewLogger(t).Sugar())
59+
c, id, err := p.Client(context.Background(), &client.ObjectKey{Name: "api-secret", Namespace: "default"}, zaptest.NewLogger(t).Sugar())
6060
assert.NoError(t, err)
6161
assert.Equal(t, "1234567890", id)
6262
assert.NotNil(t, c)
@@ -65,17 +65,17 @@ func TestProviderClient(t *testing.T) {
6565

6666
func TestProvider_IsCloudGov(t *testing.T) {
6767
t.Run("should return false for invalid domain", func(t *testing.T) {
68-
p := NewProductionProvider("http://x:namedport", &client.ObjectKey{}, nil)
68+
p := NewProductionProvider("http://x:namedport", client.ObjectKey{}, nil)
6969
assert.False(t, p.IsCloudGov())
7070
})
7171

7272
t.Run("should return false for commercial Atlas domain", func(t *testing.T) {
73-
p := NewProductionProvider("https://cloud.mongodb.com/", &client.ObjectKey{}, nil)
73+
p := NewProductionProvider("https://cloud.mongodb.com/", client.ObjectKey{}, nil)
7474
assert.False(t, p.IsCloudGov())
7575
})
7676

7777
t.Run("should return true for Atlas for government domain", func(t *testing.T) {
78-
p := NewProductionProvider("https://cloud.mongodbgov.com/", &client.ObjectKey{}, nil)
78+
p := NewProductionProvider("https://cloud.mongodbgov.com/", client.ObjectKey{}, nil)
7979
assert.True(t, p.IsCloudGov())
8080
})
8181
}
@@ -166,7 +166,7 @@ func TestProvider_IsResourceSupported(t *testing.T) {
166166

167167
for desc, data := range dataProvider {
168168
t.Run(desc, func(t *testing.T) {
169-
p := NewProductionProvider(data.domain, &client.ObjectKey{}, nil)
169+
p := NewProductionProvider(data.domain, client.ObjectKey{}, nil)
170170
assert.Equal(t, data.expectation, p.IsResourceSupported(data.resource))
171171
})
172172
}
@@ -210,10 +210,3 @@ func TestOperatorUserAgent(t *testing.T) {
210210
require.Contains(t, userAgent, "MongoDBAtlasKubernetesOperator")
211211
require.Contains(t, userAgent, version.Version)
212212
}
213-
214-
func objectKey(obj client.Object) *client.ObjectKey {
215-
return &client.ObjectKey{
216-
Name: obj.GetName(),
217-
Namespace: obj.GetNamespace(),
218-
}
219-
}

pkg/controller/atlasdatabaseuser/atlasdatabaseuser_controller.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,7 @@ func (r *AtlasDatabaseUserReconciler) Reconcile(ctx context.Context, req ctrl.Re
127127
return result.ReconcileResult(), nil
128128
}
129129

130-
globalSecret := r.AtlasProvider.GlobalFallbackSecret()
131-
credentialsSecret, err := customresource.ComputeSecret(globalSecret, project, databaseUser)
130+
credentialsSecret, err := customresource.ComputeSecret(project, databaseUser)
132131
if err != nil {
133132
result = workflow.Terminate(workflow.Internal, err.Error())
134133
workflowCtx.SetConditionFromResult(api.DatabaseUserReadyType, result)

pkg/controller/atlasdatabaseuser/databaseuser_test.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1717
"k8s.io/apimachinery/pkg/runtime"
1818
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
19-
"sigs.k8s.io/controller-runtime/pkg/client"
2019
"sigs.k8s.io/controller-runtime/pkg/client/fake"
2120
"sigs.k8s.io/controller-runtime/pkg/reconcile"
2221

@@ -168,8 +167,7 @@ func TestEnsureDatabaseUser(t *testing.T) {
168167
Client: fakeClient,
169168
Log: log,
170169
AtlasProvider: &atlas.TestProvider{
171-
IsCloudGovFunc: func() bool { return false },
172-
GlobalFallbackSecretFunc: func() *client.ObjectKey { return nil },
170+
IsCloudGovFunc: func() bool { return false },
173171
},
174172
}
175173
for _, tc := range []struct {

pkg/controller/atlasproject/atlasproject_controller_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,6 @@ func TestReconcile(t *testing.T) {
145145
SdkClientFunc: func(secretRef *client.ObjectKey, log *zap.SugaredLogger) (*admin.APIClient, string, error) {
146146
return tt.atlasSDKMocker(), "", nil
147147
},
148-
GlobalFallbackSecretFunc: func() *client.ObjectKey { return nil },
149148
},
150149
}
151150

pkg/controller/atlasproject/teams_test.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ func TestUpdateTeamState(t *testing.T) {
6868
ClientFunc: func(secretRef *client.ObjectKey, log *zap.SugaredLogger) (*mongodbatlas.Client, string, error) {
6969
return &mongodbatlas.Client{}, "0987654321", nil
7070
},
71-
GlobalFallbackSecretFunc: func() *client.ObjectKey { return objectKey(secret) },
7271
}
7372
k8sClient := buildFakeKubernetesClient(secret, project, team)
7473
reconciler := &AtlasProjectReconciler{
@@ -133,7 +132,6 @@ func TestUpdateTeamState(t *testing.T) {
133132
Teams: teamsMock,
134133
}, "0987654321", nil
135134
},
136-
GlobalFallbackSecretFunc: func() *client.ObjectKey { return objectKey(secret) },
137135
}
138136
k8sClient := buildFakeKubernetesClient(secret, project, team)
139137
reconciler := &AtlasProjectReconciler{
@@ -206,7 +204,6 @@ func TestUpdateTeamState(t *testing.T) {
206204
Teams: teamsMock,
207205
}, "0987654321", nil
208206
},
209-
GlobalFallbackSecretFunc: func() *client.ObjectKey { return nil },
210207
}
211208
reconciler := &AtlasProjectReconciler{
212209
Client: buildFakeKubernetesClient(project, team),
@@ -257,10 +254,3 @@ func reference(obj client.Object) *common.ResourceRefNamespaced {
257254
Namespace: obj.GetNamespace(),
258255
}
259256
}
260-
261-
func objectKey(obj client.Object) *client.ObjectKey {
262-
return &client.ObjectKey{
263-
Name: obj.GetName(),
264-
Namespace: obj.GetNamespace(),
265-
}
266-
}

pkg/controller/customresource/customresource.go

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -139,22 +139,7 @@ func SetAnnotation(resource api.AtlasCustomResource, key, value string) {
139139
resource.SetAnnotations(annot)
140140
}
141141

142-
func ComputeSecret(globalSecret *client.ObjectKey, project *akov2.AtlasProject, resource api.ResourceWithCredentials) (*client.ObjectKey, error) {
143-
secret, err := resolveConnectionSecret(project, resource)
144-
if err != nil {
145-
return nil, err
146-
}
147-
if secret != nil {
148-
return secret, nil
149-
}
150-
if globalSecret != nil {
151-
return globalSecret, nil
152-
}
153-
return nil, fmt.Errorf("failed to find credentials secret from resource %q, Project %q or global credentials",
154-
resource.GetName(), project.GetName())
155-
}
156-
157-
func resolveConnectionSecret(project *akov2.AtlasProject, resource api.ResourceWithCredentials) (*client.ObjectKey, error) {
142+
func ComputeSecret(project *akov2.AtlasProject, resource api.ResourceWithCredentials) (*client.ObjectKey, error) {
158143
if resource == nil {
159144
return nil, fmt.Errorf("resource cannot be nil")
160145
}

0 commit comments

Comments
 (0)