Skip to content
Snippets Groups Projects
Unverified Commit 054c52a9 authored by Kubernetes Prow Robot's avatar Kubernetes Prow Robot Committed by GitHub
Browse files

Merge pull request #4742 from x13n/eq

Skip pod hostname when comparing PodSpecs
parents 2b84cf60 109765b8
No related branches found
No related tags found
No related merge requests found
...@@ -62,14 +62,18 @@ func FilterOutNodes(nodes []*apiv1.Node, nodesToFilterOut []*apiv1.Node) []*apiv ...@@ -62,14 +62,18 @@ func FilterOutNodes(nodes []*apiv1.Node, nodesToFilterOut []*apiv1.Node) []*apiv
// an equivalence group per pod which is undesirable. // an equivalence group per pod which is undesirable.
// Projected volumes do not impact scheduling so we should ignore them // Projected volumes do not impact scheduling so we should ignore them
func PodSpecSemanticallyEqual(p1 apiv1.PodSpec, p2 apiv1.PodSpec) bool { func PodSpecSemanticallyEqual(p1 apiv1.PodSpec, p2 apiv1.PodSpec) bool {
p1Spec := sanitizeProjectedVolumesAndMounts(p1) p1Spec := sanitizePodSpec(p1)
p2Spec := sanitizeProjectedVolumesAndMounts(p2) p2Spec := sanitizePodSpec(p2)
return apiequality.Semantic.DeepEqual(p1Spec, p2Spec) return apiequality.Semantic.DeepEqual(p1Spec, p2Spec)
} }
// sanitizeProjectedVolumesAndMounts returns a pod spec with projected volumes func sanitizePodSpec(podSpec apiv1.PodSpec) apiv1.PodSpec {
// and their mounts removed dropProjectedVolumesAndMounts(&podSpec)
func sanitizeProjectedVolumesAndMounts(podSpec apiv1.PodSpec) apiv1.PodSpec { dropHostname(&podSpec)
return podSpec
}
func dropProjectedVolumesAndMounts(podSpec *apiv1.PodSpec) {
projectedVolumeNames := map[string]bool{} projectedVolumeNames := map[string]bool{}
var volumes []apiv1.Volume var volumes []apiv1.Volume
for _, v := range podSpec.Volumes { for _, v := range podSpec.Volumes {
...@@ -90,5 +94,8 @@ func sanitizeProjectedVolumesAndMounts(podSpec apiv1.PodSpec) apiv1.PodSpec { ...@@ -90,5 +94,8 @@ func sanitizeProjectedVolumesAndMounts(podSpec apiv1.PodSpec) apiv1.PodSpec {
} }
podSpec.Containers[i].VolumeMounts = volumeMounts podSpec.Containers[i].VolumeMounts = volumeMounts
} }
return podSpec }
func dropHostname(podSpec *apiv1.PodSpec) {
podSpec.Hostname = ""
} }
...@@ -73,6 +73,16 @@ func TestPodSpecSemanticallyEqual(t *testing.T) { ...@@ -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 { for _, tt := range tests {
...@@ -83,7 +93,7 @@ func TestPodSpecSemanticallyEqual(t *testing.T) { ...@@ -83,7 +93,7 @@ func TestPodSpecSemanticallyEqual(t *testing.T) {
} }
} }
func TestSanitizeProjectedVolumesAndMounts(t *testing.T) { func TestSanitizePodSpec(t *testing.T) {
projectedSAVol := test.BuildServiceTokenProjectedVolumeSource("path") projectedSAVol := test.BuildServiceTokenProjectedVolumeSource("path")
tests := []struct { tests := []struct {
...@@ -170,7 +180,7 @@ func TestSanitizeProjectedVolumesAndMounts(t *testing.T) { ...@@ -170,7 +180,7 @@ func TestSanitizeProjectedVolumesAndMounts(t *testing.T) {
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { 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) assert.True(t, assert.ObjectsAreEqualValues(tt.outputPodSpec, got), "\ngot: %#v\nwant: %#v", got, tt.outputPodSpec)
}) })
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment