Check if key is a valid after prefix is prepended

- Allow invalid keys to become valid by requiring a prefix
This commit is contained in:
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 configMaps[name] = configMap
} }
for k, v := range configMap.Data { 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 { if len(envFrom.Prefix) > 0 {
k = envFrom.Prefix + k 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. // Accesses apiserver+Pods.
// So, the master may set service env vars, or kubelet may. In case both are doing // 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 // 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", Name: "test-configmap",
}, },
Data: map[string]string{ Data: map[string]string{
"-1234": "abc", "1234": "abc",
}, },
}, },
expectedError: true, 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 { for _, tc := range testCases {