github.com/argoproj-labs/argocd-operator@v0.10.0/controllers/argoutil/env.go (about) 1 package argoutil 2 3 import ( 4 "sort" 5 6 corev1 "k8s.io/api/core/v1" 7 ) 8 9 // EnvMerge merges two slices of EnvVar entries into a single one. If existing 10 // has an EnvVar with same Name attribute as one in merge, the EnvVar is not 11 // merged unless override is set to true. 12 func EnvMerge(existing []corev1.EnvVar, merge []corev1.EnvVar, override bool) []corev1.EnvVar { 13 ret := []corev1.EnvVar{} 14 final := map[string]corev1.EnvVar{} 15 for _, e := range existing { 16 final[e.Name] = e 17 } 18 for _, m := range merge { 19 if _, ok := final[m.Name]; ok { 20 if override { 21 final[m.Name] = m 22 } 23 } else { 24 final[m.Name] = m 25 } 26 } 27 28 for _, v := range final { 29 ret = append(ret, v) 30 } 31 32 // sort result slice by env name 33 sort.SliceStable(ret, 34 func(i, j int) bool { 35 return ret[i].Name < ret[j].Name 36 }) 37 38 return ret 39 }