Skip to content

Commit 6b45656

Browse files
committed
fix(webhook): preserve required affinity branch semantics
Signed-off-by: Harsh <harshmastic@gmail.com>
1 parent 2995a9d commit 6b45656

4 files changed

Lines changed: 525 additions & 25 deletions

File tree

pkg/utils/webhook.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,24 @@ func InjectNodeSelectorTerms(requiredSchedulingTerms []corev1.NodeSelectorTerm,
6262
if len(pod.Spec.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms) == 0 {
6363
pod.Spec.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms = requiredSchedulingTerms
6464
} else {
65-
for i := 0; i < len(requiredSchedulingTerms); i++ {
66-
pod.Spec.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions =
67-
append(pod.Spec.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions, requiredSchedulingTerms[i].MatchExpressions...)
65+
existingTerms := pod.Spec.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms
66+
combinedTerms := make([]corev1.NodeSelectorTerm, 0, len(existingTerms)*len(requiredSchedulingTerms))
67+
for i := 0; i < len(existingTerms); i++ {
68+
if len(existingTerms[i].MatchExpressions) == 0 && len(existingTerms[i].MatchFields) == 0 {
69+
continue
70+
}
71+
for j := 0; j < len(requiredSchedulingTerms); j++ {
72+
if len(requiredSchedulingTerms[j].MatchExpressions) == 0 && len(requiredSchedulingTerms[j].MatchFields) == 0 {
73+
continue
74+
}
75+
combinedTerm := corev1.NodeSelectorTerm{
76+
MatchExpressions: append(append([]corev1.NodeSelectorRequirement{}, existingTerms[i].MatchExpressions...), requiredSchedulingTerms[j].MatchExpressions...),
77+
MatchFields: append(append([]corev1.NodeSelectorRequirement{}, existingTerms[i].MatchFields...), requiredSchedulingTerms[j].MatchFields...),
78+
}
79+
combinedTerms = append(combinedTerms, combinedTerm)
80+
}
6881
}
82+
pod.Spec.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms = combinedTerms
6983
}
7084

7185
}

0 commit comments

Comments
 (0)