Skip to content

Commit 74a79e6

Browse files
committed
fix: prevent secret-name collisions in volume naming
1 parent 6d20a6c commit 74a79e6

2 files changed

Lines changed: 31 additions & 10 deletions

File tree

internal/controller/codercontrolplane_controller.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1924,9 +1924,10 @@ func operatorAccessTokenSecretName(coderControlPlane *coderv1alpha1.CoderControl
19241924
}
19251925

19261926
func volumeNameForSecret(prefix, secretName string) string {
1927-
sanitizedSecretName := sanitizeDNSLabel(strings.TrimSpace(secretName))
1927+
normalizedSecretName := strings.TrimSpace(strings.ToLower(secretName))
1928+
sanitizedSecretName := sanitizeDNSLabel(normalizedSecretName)
19281929
candidate := fmt.Sprintf("%s-%s", prefix, sanitizedSecretName)
1929-
if len(candidate) <= 63 {
1930+
if len(candidate) <= 63 && sanitizedSecretName == normalizedSecretName {
19301931
return candidate
19311932
}
19321933

internal/controller/codercontrolplane_controller_test.go

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2851,18 +2851,26 @@ func TestReconcile_TLSAndCertSecretVolumeNameSanitization(t *testing.T) {
28512851
podSpec := deployment.Spec.Template.Spec
28522852
container := podSpec.Containers[0]
28532853

2854-
if !podHasSecretVolume(podSpec, "tls-my-tls-secret", "my.tls.secret") {
2855-
t.Fatalf("expected sanitized TLS volume name for dotted secret, got %+v", podSpec.Volumes)
2854+
tlsVolumeName := secretVolumeName(podSpec, "my.tls.secret")
2855+
if tlsVolumeName == "" {
2856+
t.Fatalf("expected TLS volume for dotted secret, got %+v", podSpec.Volumes)
28562857
}
2857-
if !containerHasVolumeMount(container, "tls-my-tls-secret", "/etc/ssl/certs/coder/my.tls.secret") {
2858-
t.Fatalf("expected sanitized TLS volume mount name for dotted secret, got %+v", container.VolumeMounts)
2858+
if !strings.HasPrefix(tlsVolumeName, "tls-my-tls-secret") {
2859+
t.Fatalf("expected TLS volume name to start with %q, got %q", "tls-my-tls-secret", tlsVolumeName)
2860+
}
2861+
if !containerHasVolumeMount(container, tlsVolumeName, "/etc/ssl/certs/coder/my.tls.secret") {
2862+
t.Fatalf("expected TLS volume mount name %q for dotted secret, got %+v", tlsVolumeName, container.VolumeMounts)
28592863
}
28602864

2861-
if !podHasSecretVolume(podSpec, "ca-cert-extra-ca-secret", "extra.ca.secret") {
2862-
t.Fatalf("expected sanitized cert volume name for dotted secret, got %+v", podSpec.Volumes)
2865+
certVolumeName := secretVolumeName(podSpec, "extra.ca.secret")
2866+
if certVolumeName == "" {
2867+
t.Fatalf("expected cert volume for dotted secret, got %+v", podSpec.Volumes)
2868+
}
2869+
if !strings.HasPrefix(certVolumeName, "ca-cert-extra-ca-secret") {
2870+
t.Fatalf("expected cert volume name to start with %q, got %q", "ca-cert-extra-ca-secret", certVolumeName)
28632871
}
2864-
if !containerHasVolumeMount(container, "ca-cert-extra-ca-secret", "/etc/ssl/certs/extra.ca.secret.crt") {
2865-
t.Fatalf("expected sanitized cert volume mount name for dotted secret, got %+v", container.VolumeMounts)
2872+
if !containerHasVolumeMount(container, certVolumeName, "/etc/ssl/certs/extra.ca.secret.crt") {
2873+
t.Fatalf("expected cert volume mount name %q for dotted secret, got %+v", certVolumeName, container.VolumeMounts)
28662874
}
28672875
}
28682876

@@ -3353,6 +3361,18 @@ func podHasSecretVolume(podSpec corev1.PodSpec, volumeName, secretName string) b
33533361
return false
33543362
}
33553363

3364+
func secretVolumeName(podSpec corev1.PodSpec, secretName string) string {
3365+
for _, volume := range podSpec.Volumes {
3366+
if volume.Secret == nil {
3367+
continue
3368+
}
3369+
if volume.Secret.SecretName == secretName {
3370+
return volume.Name
3371+
}
3372+
}
3373+
return ""
3374+
}
3375+
33563376
func podHasVolume(podSpec corev1.PodSpec, volumeName string) bool {
33573377
for _, volume := range podSpec.Volumes {
33583378
if volume.Name == volumeName {

0 commit comments

Comments
 (0)