Skip to content

Commit 596491c

Browse files
committed
fix: Device Plugin daemonset keep restarting
Define an ordering of the NodeSelectorRequirement in the daemonset to avoid the daemonset to be unstable when policies come in different order. Fixes #804
1 parent 2b02ba1 commit 596491c

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

controllers/helper.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,27 @@ func nodeSelectorTermsForPolicyList(policies []sriovnetworkv1.SriovNetworkNodePo
311311
terms = append(terms, nodeSelector)
312312
}
313313

314+
// sorting is needed to keep the daemon spec stable.
315+
// the policies can come in a random order
316+
sort.Slice(terms, func(i, j int) bool {
317+
expressionsA := terms[i].MatchExpressions
318+
expressionsB := terms[j].MatchExpressions
319+
if len(expressionsA) != len(expressionsB) {
320+
return len(expressionsA) < len(expressionsB)
321+
}
322+
for k := range expressionsA {
323+
expressionA := expressionsA[k]
324+
expressionB := expressionsB[k]
325+
if expressionA.Key != expressionB.Key {
326+
return expressionA.Key < expressionB.Key
327+
}
328+
if expressionA.Values[0] != expressionB.Values[0] {
329+
return expressionA.Values[0] != expressionB.Values[0]
330+
}
331+
}
332+
return true
333+
})
334+
314335
return terms
315336
}
316337

controllers/helper_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,17 @@ func TestNodeSelectorMerge(t *testing.T) {
6464
MatchExpressions: []corev1.NodeSelectorRequirement{
6565
{
6666
Operator: corev1.NodeSelectorOpIn,
67-
Key: "foo",
68-
Values: []string{"bar"},
67+
Key: "bb",
68+
Values: []string{"cc"},
6969
},
7070
},
7171
},
7272
{
7373
MatchExpressions: []corev1.NodeSelectorRequirement{
7474
{
7575
Operator: corev1.NodeSelectorOpIn,
76-
Key: "bb",
77-
Values: []string{"cc"},
76+
Key: "foo",
77+
Values: []string{"bar"},
7878
},
7979
},
8080
},

0 commit comments

Comments
 (0)