Skip to content

Commit 696cc82

Browse files
authored
add ownerref to scram secrets (#1204)
* [CLOUDP-132990] add ownerref to scram secrets
1 parent 790b579 commit 696cc82

File tree

3 files changed

+40
-13
lines changed

3 files changed

+40
-13
lines changed

pkg/authentication/scram/mock_types_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ type mockConfigurable struct {
3737
opts Options
3838
users []User
3939
nsName types.NamespacedName
40+
refs []metav1.OwnerReference
4041
}
4142

4243
func (m mockConfigurable) GetAgentPasswordSecretNamespacedName() types.NamespacedName {
@@ -60,5 +61,5 @@ func (m mockConfigurable) NamespacedName() types.NamespacedName {
6061
}
6162

6263
func (m mockConfigurable) GetOwnerReferences() []metav1.OwnerReference {
63-
return nil
64+
return m.refs
6465
}

pkg/authentication/scram/scram.go

+8-7
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ type Configurable interface {
3737
// GetAgentPasswordSecretNamespacedName returns the NamespacedName of the secret which stores the generated password for the agent.
3838
GetAgentPasswordSecretNamespacedName() types.NamespacedName
3939

40-
// GetAgentScramKeyfileSecretNamespacedName returns the NamespacedName of the secret which stores the keyfile for the agent.
40+
// GetAgentKeyfileSecretNamespacedName returns the NamespacedName of the secret which stores the keyfile for the agent.
4141
GetAgentKeyfileSecretNamespacedName() types.NamespacedName
4242

4343
// NamespacedName returns the NamespacedName for the resource that is being configured.
@@ -142,7 +142,7 @@ func Enable(auth *automationconfig.Auth, secretGetUpdateCreateDeleter secret.Get
142142

143143
// ensureScramCredentials will ensure that the ScramSha1 & ScramSha256 credentials exist and are stored in the credentials
144144
// secret corresponding to user of the given MongoDB deployment.
145-
func ensureScramCredentials(getUpdateCreator secret.GetUpdateCreator, user User, mdbNamespacedName types.NamespacedName) (scramcredentials.ScramCreds, scramcredentials.ScramCreds, error) {
145+
func ensureScramCredentials(getUpdateCreator secret.GetUpdateCreator, user User, mdbNamespacedName types.NamespacedName, ownerRef []metav1.OwnerReference) (scramcredentials.ScramCreds, scramcredentials.ScramCreds, error) {
146146

147147
password, err := secret.ReadKey(getUpdateCreator, user.PasswordSecretKey, types.NamespacedName{Name: user.PasswordSecretName, Namespace: mdbNamespacedName.Namespace})
148148
if err != nil {
@@ -176,7 +176,7 @@ func ensureScramCredentials(getUpdateCreator secret.GetUpdateCreator, user User,
176176
}
177177

178178
// create or update our credentials secret for this user
179-
if err := createScramCredentialsSecret(getUpdateCreator, mdbNamespacedName, user.ScramCredentialsSecretName, sha1Creds, sha256Creds); err != nil {
179+
if err := createScramCredentialsSecret(getUpdateCreator, mdbNamespacedName, ownerRef, user.ScramCredentialsSecretName, sha1Creds, sha256Creds); err != nil {
180180
return scramcredentials.ScramCreds{}, scramcredentials.ScramCreds{}, fmt.Errorf("faild to create scram credentials secret %s: %s", user.ScramCredentialsSecretName, err)
181181
}
182182

@@ -260,7 +260,7 @@ func computeScramShaCredentials(username, password string, sha1Salt, sha256Salt
260260

261261
// createScramCredentialsSecret will create a Secret that contains all of the fields required to read these credentials
262262
// back in the future.
263-
func createScramCredentialsSecret(getUpdateCreator secret.GetUpdateCreator, mdbObjectKey types.NamespacedName, scramCredentialsSecretName string, sha1Creds, sha256Creds scramcredentials.ScramCreds) error {
263+
func createScramCredentialsSecret(getUpdateCreator secret.GetUpdateCreator, mdbObjectKey types.NamespacedName, ref []metav1.OwnerReference, scramCredentialsSecretName string, sha1Creds, sha256Creds scramcredentials.ScramCreds) error {
264264
scramCredsSecret := secret.Builder().
265265
SetName(scramCredentialsSecretName).
266266
SetNamespace(mdbObjectKey.Namespace).
@@ -270,6 +270,7 @@ func createScramCredentialsSecret(getUpdateCreator secret.GetUpdateCreator, mdbO
270270
SetField(sha256SaltKey, sha256Creds.Salt).
271271
SetField(sha256StoredKeyKey, sha256Creds.StoredKey).
272272
SetField(sha256ServerKeyKey, sha256Creds.ServerKey).
273+
SetOwnerReferences(ref).
273274
Build()
274275
return secret.CreateOrUpdate(getUpdateCreator, scramCredsSecret)
275276
}
@@ -307,7 +308,7 @@ func readExistingCredentials(secretGetter secret.Getter, mdbObjectKey types.Name
307308
func convertMongoDBResourceUsersToAutomationConfigUsers(secretGetUpdateCreateDeleter secret.GetUpdateCreateDeleter, mdb Configurable) ([]automationconfig.MongoDBUser, error) {
308309
var usersWanted []automationconfig.MongoDBUser
309310
for _, u := range mdb.GetScramUsers() {
310-
acUser, err := convertMongoDBUserToAutomationConfigUser(secretGetUpdateCreateDeleter, mdb.NamespacedName(), u)
311+
acUser, err := convertMongoDBUserToAutomationConfigUser(secretGetUpdateCreateDeleter, mdb.NamespacedName(), mdb.GetOwnerReferences(), u)
311312
if err != nil {
312313
return nil, fmt.Errorf("failed to convert scram user %s to Automation Config user: %s", u.Username, err)
313314
}
@@ -318,7 +319,7 @@ func convertMongoDBResourceUsersToAutomationConfigUsers(secretGetUpdateCreateDel
318319

319320
// convertMongoDBUserToAutomationConfigUser converts a single user configured in the MongoDB resource and converts it to a user
320321
// that can be added directly to the AutomationConfig.
321-
func convertMongoDBUserToAutomationConfigUser(secretGetUpdateCreateDeleter secret.GetUpdateCreateDeleter, mdbNsName types.NamespacedName, user User) (automationconfig.MongoDBUser, error) {
322+
func convertMongoDBUserToAutomationConfigUser(secretGetUpdateCreateDeleter secret.GetUpdateCreateDeleter, mdbNsName types.NamespacedName, ownerRef []metav1.OwnerReference, user User) (automationconfig.MongoDBUser, error) {
322323
acUser := automationconfig.MongoDBUser{
323324
Username: user.Username,
324325
Database: user.Database,
@@ -329,7 +330,7 @@ func convertMongoDBUserToAutomationConfigUser(secretGetUpdateCreateDeleter secre
329330
Database: role.Database,
330331
})
331332
}
332-
sha1Creds, sha256Creds, err := ensureScramCredentials(secretGetUpdateCreateDeleter, user, mdbNsName)
333+
sha1Creds, sha256Creds, err := ensureScramCredentials(secretGetUpdateCreateDeleter, user, mdbNsName, ownerRef)
333334
if err != nil {
334335
return automationconfig.MongoDBUser{}, fmt.Errorf("could not ensure scram credentials: %s", err)
335336
}

pkg/authentication/scram/scram_test.go

+30-5
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,12 @@ func TestComputeScramCredentials_ComputesSameStoredAndServerKey_WithSameSalt(t *
9898
func TestEnsureScramCredentials(t *testing.T) {
9999
mdb, user := buildConfigurableAndUser("mdb-0")
100100
t.Run("Fails when there is no password secret, and no credentials secret", func(t *testing.T) {
101-
_, _, err := ensureScramCredentials(newMockedSecretGetUpdateCreateDeleter(), user, mdb.NamespacedName())
101+
_, _, err := ensureScramCredentials(newMockedSecretGetUpdateCreateDeleter(), user, mdb.NamespacedName(), nil)
102102
assert.Error(t, err)
103103
})
104104
t.Run("Existing credentials are used when password does not exist, but credentials secret has been created", func(t *testing.T) {
105105
scramCredentialsSecret := validScramCredentialsSecret(mdb.NamespacedName(), user.ScramCredentialsSecretName)
106-
scram1Creds, scram256Creds, err := ensureScramCredentials(newMockedSecretGetUpdateCreateDeleter(scramCredentialsSecret), user, mdb.NamespacedName())
106+
scram1Creds, scram256Creds, err := ensureScramCredentials(newMockedSecretGetUpdateCreateDeleter(scramCredentialsSecret), user, mdb.NamespacedName(), nil)
107107
assert.NoError(t, err)
108108
assertScramCredsCredentialsValidity(t, scram1Creds, scram256Creds)
109109
})
@@ -118,7 +118,7 @@ func TestEnsureScramCredentials(t *testing.T) {
118118
Build()
119119

120120
scramCredentialsSecret := validScramCredentialsSecret(mdb.NamespacedName(), user.ScramCredentialsSecretName)
121-
scram1Creds, scram256Creds, err := ensureScramCredentials(newMockedSecretGetUpdateCreateDeleter(scramCredentialsSecret, differentPasswordSecret), user, mdb.NamespacedName())
121+
scram1Creds, scram256Creds, err := ensureScramCredentials(newMockedSecretGetUpdateCreateDeleter(scramCredentialsSecret, differentPasswordSecret), user, mdb.NamespacedName(), nil)
122122
assert.NoError(t, err)
123123
assert.NotEqual(t, testSha1Salt, scram1Creds.Salt)
124124
assert.NotEmpty(t, scram1Creds.Salt)
@@ -148,7 +148,7 @@ func TestConvertMongoDBUserToAutomationConfigUser(t *testing.T) {
148148
SetField(user.PasswordSecretKey, "TDg_DESiScDrJV6").
149149
Build()
150150

151-
acUser, err := convertMongoDBUserToAutomationConfigUser(newMockedSecretGetUpdateCreateDeleter(passwordSecret), mdb.NamespacedName(), user)
151+
acUser, err := convertMongoDBUserToAutomationConfigUser(newMockedSecretGetUpdateCreateDeleter(passwordSecret), mdb.NamespacedName(), nil, user)
152152

153153
assert.NoError(t, err)
154154
assert.Equal(t, user.Username, acUser.Username)
@@ -163,7 +163,7 @@ func TestConvertMongoDBUserToAutomationConfigUser(t *testing.T) {
163163
})
164164

165165
t.Run("If there is no password secret, the creation fails", func(t *testing.T) {
166-
_, err := convertMongoDBUserToAutomationConfigUser(newMockedSecretGetUpdateCreateDeleter(), mdb.NamespacedName(), user)
166+
_, err := convertMongoDBUserToAutomationConfigUser(newMockedSecretGetUpdateCreateDeleter(), mdb.NamespacedName(), nil, user)
167167
assert.Error(t, err)
168168
})
169169
}
@@ -177,6 +177,7 @@ func TestConfigureScram(t *testing.T) {
177177
err := Enable(&auth, s, mdb)
178178
assert.Error(t, err)
179179
})
180+
180181
t.Run("Agent Credentials Secret should be created if there are no users", func(t *testing.T) {
181182
mdb := buildConfigurable("mdb-0")
182183
s := newMockedSecretGetUpdateCreateDeleter()
@@ -195,6 +196,25 @@ func TestConfigureScram(t *testing.T) {
195196
assert.NotEmpty(t, keyfileSecret.Data[AgentKeyfileKey])
196197
})
197198

199+
t.Run("Agent Credentials Secret should contain owner reference", func(t *testing.T) {
200+
mdb := buildConfigurable("mdb-0")
201+
s := newMockedSecretGetUpdateCreateDeleter()
202+
auth := automationconfig.Auth{}
203+
err := Enable(&auth, s, mdb)
204+
assert.NoError(t, err)
205+
206+
passwordSecret, err := s.GetSecret(mdb.GetAgentPasswordSecretNamespacedName())
207+
assert.NoError(t, err)
208+
209+
actualRef := passwordSecret.GetOwnerReferences()
210+
expectedRef := []metav1.OwnerReference{{
211+
APIVersion: "v1",
212+
Kind: "mdbc",
213+
Name: "my-ref",
214+
}}
215+
assert.Equal(t, expectedRef, actualRef)
216+
})
217+
198218
t.Run("Agent Password Secret is used if it exists", func(t *testing.T) {
199219
mdb := buildConfigurable("mdb-0")
200220

@@ -261,6 +281,11 @@ func buildConfigurable(name string, users ...User) Configurable {
261281
Name: name,
262282
Namespace: "default",
263283
},
284+
refs: []metav1.OwnerReference{{
285+
APIVersion: "v1",
286+
Kind: "mdbc",
287+
Name: "my-ref",
288+
}},
264289
}
265290
}
266291

0 commit comments

Comments
 (0)