diff --git a/pkg/webhook/utils.go b/pkg/webhook/utils.go index 559967cfb8..f7a7f5913c 100644 --- a/pkg/webhook/utils.go +++ b/pkg/webhook/utils.go @@ -107,7 +107,7 @@ func appendVolumeMountIfNotExists(volumes []corev1.VolumeMount, vol corev1.Volum func AppendVolume(volumes []corev1.Volume, volume corev1.Volume) []corev1.Volume { for _, v := range volumes { // append secret items to existing volume for secret within same secret group - if v.Secret.SecretName == volume.Secret.SecretName { + if v.Secret != nil && v.Secret.SecretName == volume.Secret.SecretName { v.Secret.Items = append(v.Secret.Items, volume.Secret.Items...) return volumes } diff --git a/pkg/webhook/utils_test.go b/pkg/webhook/utils_test.go index b85793ea36..15079ca8fb 100644 --- a/pkg/webhook/utils_test.go +++ b/pkg/webhook/utils_test.go @@ -5,6 +5,8 @@ import ( "reflect" "testing" + "github.com/go-test/deep" + corev1 "k8s.io/api/core/v1" ) @@ -176,3 +178,38 @@ func TestUpdateEnvVars(t *testing.T) { }) } } + +func TestAppendVolume(t *testing.T) { + type args struct { + volumes []corev1.Volume + volume corev1.Volume + } + tests := []struct { + name string + args args + want []corev1.Volume + }{ + {name: "append secret", args: args{volumes: []corev1.Volume{}, volume: corev1.Volume{Name: "new_secret"}}, want: []corev1.Volume{{Name: "new_secret"}}}, + {name: "existing other volumes", args: args{volumes: []corev1.Volume{{Name: "existing"}}, volume: corev1.Volume{Name: "new_secret"}}, want: []corev1.Volume{{Name: "existing"}, {Name: "new_secret"}}}, + {name: "existing secret volume", + args: args{ + volumes: []corev1.Volume{{ + Name: "existing", VolumeSource: corev1.VolumeSource{Secret: &corev1.SecretVolumeSource{SecretName: "foo", Items: []corev1.KeyToPath{{Key: "existingKey"}}}}, + }}, + volume: corev1.Volume{Name: "new_secret", VolumeSource: corev1.VolumeSource{Secret: &corev1.SecretVolumeSource{SecretName: "foo", Items: []corev1.KeyToPath{{Key: "newKey"}}}}}}, + want: []corev1.Volume{{ + Name: "existing", VolumeSource: corev1.VolumeSource{Secret: &corev1.SecretVolumeSource{SecretName: "foo", Items: []corev1.KeyToPath{{Key: "existingKey"}, {Key: "newKey"}}}}, + }}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := AppendVolume(tt.args.volumes, tt.args.volume) + if diff := deep.Equal(got, tt.want); diff != nil { + t.Errorf("AppendVolume() = %v, want %v", got, tt.want) + t.Errorf("Diff: %v", diff) + } + }) + } +}