kubeadm: sort the results of MergeKubeadmEnvVars

MergeKubeadmEnvVars use a map which results in non
deterministic output in the end slice EnvVar objects.
Before returning the slice, sort it by the Name field.

Update the unit test to capture the sorting aspect.
This commit is contained in:
Lubomir I. Ivanov 2024-08-16 17:37:23 +03:00
parent ffbc494a4a
commit a9f681d40a
2 changed files with 7 additions and 5 deletions

View File

@ -18,6 +18,7 @@ package util
import (
"os"
"sort"
"strings"
v1 "k8s.io/api/core/v1"
@ -63,5 +64,8 @@ func MergeKubeadmEnvVars(envList ...[]kubeadmapi.EnvVar) []v1.EnvVar {
for _, v := range m {
merged = append(merged, v)
}
sort.Slice(merged, func(i, j int) bool {
return merged[i].Name < merged[j].Name
})
return merged
}

View File

@ -20,8 +20,6 @@ import (
"reflect"
"testing"
"github.com/stretchr/testify/assert"
v1 "k8s.io/api/core/v1"
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
@ -41,10 +39,10 @@ func TestMergeKubeadmEnvVars(t *testing.T) {
name: "normal case without duplicated env",
proxyEnv: []kubeadmapi.EnvVar{
{
EnvVar: v1.EnvVar{Name: "Foo1", Value: "Bar1"},
EnvVar: v1.EnvVar{Name: "Foo2", Value: "Bar2"},
},
{
EnvVar: v1.EnvVar{Name: "Foo2", Value: "Bar2"},
EnvVar: v1.EnvVar{Name: "Foo1", Value: "Bar1"},
},
},
extraEnv: []kubeadmapi.EnvVar{
@ -83,7 +81,7 @@ func TestMergeKubeadmEnvVars(t *testing.T) {
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
envs := MergeKubeadmEnvVars(test.proxyEnv, test.extraEnv)
if !assert.ElementsMatch(t, envs, test.mergedEnv) {
if !reflect.DeepEqual(envs, test.mergedEnv) {
t.Errorf("expected env: %v, got: %v", test.mergedEnv, envs)
}
})