@@ -2557,8 +2557,14 @@ func ValidateEnv(vars []core.EnvVar, fldPath *field.Path, opts PodValidationOpti
2557
2557
if len (ev .Name ) == 0 {
2558
2558
allErrs = append (allErrs , field .Required (idxPath .Child ("name" ), "" ))
2559
2559
} else {
2560
- for _ , msg := range validation .IsEnvVarName (ev .Name ) {
2561
- allErrs = append (allErrs , field .Invalid (idxPath .Child ("name" ), ev .Name , msg ))
2560
+ if opts .AllowRelaxedEnvironmentVariableValidation {
2561
+ for _ , msg := range validation .IsRelaxedEnvVarName (ev .Name ) {
2562
+ allErrs = append (allErrs , field .Invalid (idxPath .Child ("name" ), ev .Name , msg ))
2563
+ }
2564
+ } else {
2565
+ for _ , msg := range validation .IsEnvVarName (ev .Name ) {
2566
+ allErrs = append (allErrs , field .Invalid (idxPath .Child ("name" ), ev .Name , msg ))
2567
+ }
2562
2568
}
2563
2569
}
2564
2570
allErrs = append (allErrs , validateEnvVarValueFrom (ev , idxPath .Child ("valueFrom" ), opts )... )
@@ -2703,13 +2709,19 @@ func validateContainerResourceFieldSelector(fs *core.ResourceFieldSelector, expr
2703
2709
return allErrs
2704
2710
}
2705
2711
2706
- func ValidateEnvFrom (vars []core.EnvFromSource , fldPath * field.Path ) field.ErrorList {
2712
+ func ValidateEnvFrom (vars []core.EnvFromSource , fldPath * field.Path , opts PodValidationOptions ) field.ErrorList {
2707
2713
allErrs := field.ErrorList {}
2708
2714
for i , ev := range vars {
2709
2715
idxPath := fldPath .Index (i )
2710
2716
if len (ev .Prefix ) > 0 {
2711
- for _ , msg := range validation .IsEnvVarName (ev .Prefix ) {
2712
- allErrs = append (allErrs , field .Invalid (idxPath .Child ("prefix" ), ev .Prefix , msg ))
2717
+ if opts .AllowRelaxedEnvironmentVariableValidation {
2718
+ for _ , msg := range validation .IsRelaxedEnvVarName (ev .Prefix ) {
2719
+ allErrs = append (allErrs , field .Invalid (idxPath .Child ("prefix" ), ev .Prefix , msg ))
2720
+ }
2721
+ } else {
2722
+ for _ , msg := range validation .IsEnvVarName (ev .Prefix ) {
2723
+ allErrs = append (allErrs , field .Invalid (idxPath .Child ("prefix" ), ev .Prefix , msg ))
2724
+ }
2713
2725
}
2714
2726
}
2715
2727
@@ -3532,7 +3544,7 @@ func validateContainerCommon(ctr *core.Container, volumes map[string]core.Volume
3532
3544
volDevices := GetVolumeDeviceMap (ctr .VolumeDevices )
3533
3545
allErrs = append (allErrs , validateContainerPorts (ctr .Ports , path .Child ("ports" ))... )
3534
3546
allErrs = append (allErrs , ValidateEnv (ctr .Env , path .Child ("env" ), opts )... )
3535
- allErrs = append (allErrs , ValidateEnvFrom (ctr .EnvFrom , path .Child ("envFrom" ))... )
3547
+ allErrs = append (allErrs , ValidateEnvFrom (ctr .EnvFrom , path .Child ("envFrom" ), opts )... )
3536
3548
allErrs = append (allErrs , ValidateVolumeMounts (ctr .VolumeMounts , volDevices , volumes , ctr , path .Child ("volumeMounts" ))... )
3537
3549
allErrs = append (allErrs , ValidateVolumeDevices (ctr .VolumeDevices , volMounts , volumes , path .Child ("volumeDevices" ))... )
3538
3550
allErrs = append (allErrs , validatePullPolicy (ctr .ImagePullPolicy , path .Child ("imagePullPolicy" ))... )
@@ -3981,6 +3993,8 @@ type PodValidationOptions struct {
3981
3993
// The top-level resource being validated is a Pod, not just a PodSpec
3982
3994
// embedded in some other resource.
3983
3995
ResourceIsPod bool
3996
+ // Allow relaxed validation of environment variable names
3997
+ AllowRelaxedEnvironmentVariableValidation bool
3984
3998
}
3985
3999
3986
4000
// validatePodMetadataAndSpec tests if required fields in the pod.metadata and pod.spec are set,
0 commit comments