@@ -25,37 +25,40 @@ func InjectEnvIntoDeployment(podSpec *corev1.PodSpec, envVars []corev1.EnvVar) e
25
25
return nil
26
26
}
27
27
28
- func mergeEnvVars (containerEnvVars []corev1.EnvVar , newEnvVars []corev1.EnvVar ) (merged []corev1.EnvVar ) {
29
- merged = containerEnvVars
30
-
31
- for _ , newEnvVar := range newEnvVars {
32
- existing , found := findEnvVar (containerEnvVars , newEnvVar .Name )
33
- if found {
34
- existing .Value = newEnvVar .Value
28
+ func mergeEnvVars (containerEnvVars []corev1.EnvVar , newEnvVars []corev1.EnvVar ) []corev1.EnvVar {
29
+ // Build a map of environment variables.
30
+ // newEnvVars always overrides containerEnvVars.
31
+ mergedMap := map [string ]corev1.EnvVar {}
32
+ for _ , envVar := range containerEnvVars {
33
+ mergedMap [envVar .Name ] = envVar
34
+ }
35
+ for _ , envVar := range newEnvVars {
36
+ mergedMap [envVar .Name ] = envVar
37
+ }
38
+
39
+ // To keep things in the expected order, always put the
40
+ // original environment variable names into the merged
41
+ // output in place first.
42
+ merged := make ([]corev1.EnvVar , 0 , len (mergedMap ))
43
+ for _ , e := range containerEnvVars {
44
+ envVar := mergedMap [e .Name ]
45
+ merged = append (merged , envVar )
46
+ delete (mergedMap , e .Name )
47
+ }
48
+
49
+ // Then for any remaining newEnvVars (i.e. env vars
50
+ // that weren't present in the containerEnvVars), add
51
+ // them at the end in the order they were provided in
52
+ // the subscription.
53
+ for _ , e := range newEnvVars {
54
+ envVar , ok := mergedMap [e .Name ]
55
+ if ! ok {
35
56
continue
36
57
}
37
-
38
- merged = append (merged , corev1.EnvVar {
39
- Name : newEnvVar .Name ,
40
- Value : newEnvVar .Value ,
41
- })
42
- }
43
-
44
- return
45
- }
46
-
47
- func findEnvVar (proxyEnvVar []corev1.EnvVar , name string ) (foundEnvVar * corev1.EnvVar , found bool ) {
48
- for i := range proxyEnvVar {
49
- if name == proxyEnvVar [i ].Name {
50
- // Environment variable names are case sensitive.
51
- found = true
52
- foundEnvVar = & proxyEnvVar [i ]
53
-
54
- break
55
- }
58
+ merged = append (merged , envVar )
56
59
}
57
60
58
- return
61
+ return merged
59
62
}
60
63
61
64
// InjectVolumesIntoDeployment injects the provided Volumes
0 commit comments