Check if key is a valid after prefix is prepended

- Allow invalid keys to become valid by requiring a prefix
pull/6/head
Michael Fraenkel 2017-01-04 08:26:05 -05:00
parent cb78349735
commit f6c9ab4312
2 changed files with 32 additions and 5 deletions

View File

@ -437,13 +437,12 @@ func (kl *Kubelet) makeEnvironmentVariables(pod *v1.Pod, container *v1.Container
configMaps[name] = configMap
}
for k, v := range configMap.Data {
if errMsgs := utilvalidation.IsCIdentifier(k); len(errMsgs) != 0 {
return result, fmt.Errorf("Invalid environment variable name, %v, from configmap %v/%v: %s", k, pod.Namespace, name, errMsgs[0])
}
if len(envFrom.Prefix) > 0 {
k = envFrom.Prefix + k
}
if errMsgs := utilvalidation.IsCIdentifier(k); len(errMsgs) != 0 {
return result, fmt.Errorf("Invalid environment variable name, %v, from configmap %v/%v: %s", k, pod.Namespace, name, errMsgs[0])
}
// Accesses apiserver+Pods.
// So, the master may set service env vars, or kubelet may. In case both are doing
// it, we delete the key from the kubelet-generated ones so we don't have duplicate

View File

@ -728,11 +728,39 @@ func TestMakeEnvironmentVariables(t *testing.T) {
Name: "test-configmap",
},
Data: map[string]string{
"-1234": "abc",
"1234": "abc",
},
},
expectedError: true,
},
{
name: "configmap_invalid_keys_valid",
ns: "test",
container: &v1.Container{
EnvFrom: []v1.EnvFromSource{
{
Prefix: "p_",
ConfigMapRef: &v1.ConfigMapEnvSource{LocalObjectReference: v1.LocalObjectReference{Name: "test-config-map"}},
},
},
},
masterServiceNs: "",
configMap: &v1.ConfigMap{
ObjectMeta: v1.ObjectMeta{
Namespace: "test1",
Name: "test-configmap",
},
Data: map[string]string{
"1234": "abc",
},
},
expectedEnvs: []kubecontainer.EnvVar{
{
Name: "p_1234",
Value: "abc",
},
},
},
}
for _, tc := range testCases {