diff --git a/cluster-autoscaler/utils/utils.go b/cluster-autoscaler/utils/utils.go index cfd9231e44199d9d52a7e6b2bd6df97b27a9ae67..70444651e8e2b05ff2ab43619e623c00cb98b751 100644 --- a/cluster-autoscaler/utils/utils.go +++ b/cluster-autoscaler/utils/utils.go @@ -62,14 +62,18 @@ func FilterOutNodes(nodes []*apiv1.Node, nodesToFilterOut []*apiv1.Node) []*apiv // an equivalence group per pod which is undesirable. // Projected volumes do not impact scheduling so we should ignore them func PodSpecSemanticallyEqual(p1 apiv1.PodSpec, p2 apiv1.PodSpec) bool { - p1Spec := sanitizeProjectedVolumesAndMounts(p1) - p2Spec := sanitizeProjectedVolumesAndMounts(p2) + p1Spec := sanitizePodSpec(p1) + p2Spec := sanitizePodSpec(p2) return apiequality.Semantic.DeepEqual(p1Spec, p2Spec) } -// sanitizeProjectedVolumesAndMounts returns a pod spec with projected volumes -// and their mounts removed -func sanitizeProjectedVolumesAndMounts(podSpec apiv1.PodSpec) apiv1.PodSpec { +func sanitizePodSpec(podSpec apiv1.PodSpec) apiv1.PodSpec { + dropProjectedVolumesAndMounts(&podSpec) + dropHostname(&podSpec) + return podSpec +} + +func dropProjectedVolumesAndMounts(podSpec *apiv1.PodSpec) { projectedVolumeNames := map[string]bool{} var volumes []apiv1.Volume for _, v := range podSpec.Volumes { @@ -90,5 +94,8 @@ func sanitizeProjectedVolumesAndMounts(podSpec apiv1.PodSpec) apiv1.PodSpec { } podSpec.Containers[i].VolumeMounts = volumeMounts } - return podSpec +} + +func dropHostname(podSpec *apiv1.PodSpec) { + podSpec.Hostname = "" } diff --git a/cluster-autoscaler/utils/utils_test.go b/cluster-autoscaler/utils/utils_test.go index 744c7ee9cdb1f55803f5be34973f1163d8909b0e..b90fa4f64b9b22d355dd33e600774a0d703237f6 100644 --- a/cluster-autoscaler/utils/utils_test.go +++ b/cluster-autoscaler/utils/utils_test.go @@ -73,6 +73,16 @@ func TestPodSpecSemanticallyEqual(t *testing.T) { }, }, }, + { + name: "two pods with different hostnames", + p1Spec: apiv1.PodSpec{ + Hostname: "foo", + }, + p2Spec: apiv1.PodSpec{ + Hostname: "bar", + }, + result: true, + }, } for _, tt := range tests { @@ -83,7 +93,7 @@ func TestPodSpecSemanticallyEqual(t *testing.T) { } } -func TestSanitizeProjectedVolumesAndMounts(t *testing.T) { +func TestSanitizePodSpec(t *testing.T) { projectedSAVol := test.BuildServiceTokenProjectedVolumeSource("path") tests := []struct { @@ -170,7 +180,7 @@ func TestSanitizeProjectedVolumesAndMounts(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got := sanitizeProjectedVolumesAndMounts(tt.inputPodSpec) + got := sanitizePodSpec(tt.inputPodSpec) assert.True(t, assert.ObjectsAreEqualValues(tt.outputPodSpec, got), "\ngot: %#v\nwant: %#v", got, tt.outputPodSpec) }) }