@@ -1078,7 +1078,7 @@ func (c *Cluster) syncSecrets() error {
10781078 c .Secrets [updatedSecret .UID ] = updatedSecret
10791079 continue
10801080 }
1081- errors = append (errors , fmt .Sprintf ("syncing secret %s failed: %v" , util .NameFromMeta (updatedSecret .ObjectMeta ), err ))
1081+ errors = append (errors , fmt .Sprintf ("syncing secret %s failed: %v" , util .NameFromMeta (generatedSecret .ObjectMeta ), err ))
10821082 pgUserDegraded = true
10831083 } else {
10841084 errors = append (errors , fmt .Sprintf ("could not create secret for user %s: in namespace %s: %v" , secretUsername , generatedSecret .Namespace , err ))
@@ -1089,16 +1089,9 @@ func (c *Cluster) syncSecrets() error {
10891089
10901090 // remove rotation users that exceed the retention interval
10911091 if len (retentionUsers ) > 0 {
1092- err := c .initDbConn ()
1093- if err != nil {
1094- errors = append (errors , fmt .Sprintf ("could not init db connection: %v" , err ))
1095- }
1096- if err = c .cleanupRotatedUsers (retentionUsers , c .pgDb ); err != nil {
1092+ if err := c .cleanupRotatedUsers (retentionUsers ); err != nil {
10971093 errors = append (errors , fmt .Sprintf ("error removing users exceeding configured retention interval: %v" , err ))
10981094 }
1099- if err := c .closeDbConn (); err != nil {
1100- errors = append (errors , fmt .Sprintf ("could not close database connection after removing users exceeding configured retention interval: %v" , err ))
1101- }
11021095 }
11031096
11041097 if len (errors ) > 0 {
@@ -1187,13 +1180,18 @@ func (c *Cluster) updateSecret(
11871180 }
11881181 } else {
11891182 // username might not match if password rotation has been disabled again
1190- if secretUsername != string (secret .Data ["username" ]) {
1183+ usernameFromSecret := string (secret .Data ["username" ])
1184+ if secretUsername != usernameFromSecret {
1185+ // handle edge case when manifest user conflicts with a user from prepared databases
1186+ if strings .Replace (usernameFromSecret , "-" , "_" , - 1 ) == strings .Replace (secretUsername , "-" , "_" , - 1 ) {
1187+ return nil , fmt .Errorf ("could not update secret because of user name mismatch: expected: %s, got: %s" , secretUsername , usernameFromSecret )
1188+ }
11911189 * retentionUsers = append (* retentionUsers , secretUsername )
11921190 secret .Data ["username" ] = []byte (secretUsername )
11931191 secret .Data ["password" ] = []byte (util .RandomPassword (constants .PasswordLength ))
11941192 secret .Data ["nextRotation" ] = []byte {}
11951193 updateSecret = true
1196- updateSecretMsg = fmt .Sprintf ("secret %s does not contain the role %s - updating username and resetting password" , secretName , secretUsername )
1194+ updateSecretMsg = fmt .Sprintf ("secret does not contain the role %s - updating username and resetting password" , secretUsername )
11971195 }
11981196 }
11991197
@@ -1223,18 +1221,18 @@ func (c *Cluster) updateSecret(
12231221 if updateSecret {
12241222 c .logger .Infof ("%s" , updateSecretMsg )
12251223 if secret , err = c .KubeClient .Secrets (secret .Namespace ).Update (context .TODO (), secret , metav1.UpdateOptions {}); err != nil {
1226- return secret , fmt .Errorf ("could not update secret %s : %v" , secretName , err )
1224+ return nil , fmt .Errorf ("could not update secret: %v" , err )
12271225 }
12281226 }
12291227
12301228 if changed , _ := c .compareAnnotations (secret .Annotations , generatedSecret .Annotations , nil ); changed {
12311229 patchData , err := metaAnnotationsPatch (generatedSecret .Annotations )
12321230 if err != nil {
1233- return secret , fmt .Errorf ("could not form patch for secret %q annotations: %v" , secret . Name , err )
1231+ return nil , fmt .Errorf ("could not form patch for secret annotations: %v" , err )
12341232 }
12351233 secret , err = c .KubeClient .Secrets (secret .Namespace ).Patch (context .TODO (), secret .Name , types .MergePatchType , []byte (patchData ), metav1.PatchOptions {})
12361234 if err != nil {
1237- return secret , fmt .Errorf ("could not patch annotations for secret %q : %v" , secret . Name , err )
1235+ return nil , fmt .Errorf ("could not patch annotations for secret: %v" , err )
12381236 }
12391237 }
12401238
0 commit comments