Enque DaemonSet sync when node taints changed

Fixes #42398
This commit is contained in:
Łukasz Oleś
2017-03-02 12:44:59 +01:00
parent fc31dae165
commit 5dbb8e0d24
2 changed files with 71 additions and 3 deletions

View File

@@ -1086,3 +1086,68 @@ func TestNodeShouldRunDaemonPod(t *testing.T) {
}
}
}
// DaemonSets should be resynced when node labels or taints changed
func TestUpdateNode(t *testing.T) {
var enqueued bool
cases := []struct {
test string
newNode *v1.Node
oldNode *v1.Node
ds *extensions.DaemonSet
shouldEnqueue bool
}{
{
test: "Nothing changed, should not enqueue",
oldNode: newNode("node1", nil),
newNode: newNode("node1", nil),
ds: func() *extensions.DaemonSet {
ds := newDaemonSet("ds")
ds.Spec.Template.Spec.NodeSelector = simpleNodeLabel
return ds
}(),
shouldEnqueue: false,
},
{
test: "Node labels changed",
oldNode: newNode("node1", nil),
newNode: newNode("node1", simpleNodeLabel),
ds: func() *extensions.DaemonSet {
ds := newDaemonSet("ds")
ds.Spec.Template.Spec.NodeSelector = simpleNodeLabel
return ds
}(),
shouldEnqueue: true,
},
{
test: "Node taints changed",
oldNode: func() *v1.Node {
node := newNode("node1", nil)
setNodeTaint(node, noScheduleTaints)
return node
}(),
newNode: newNode("node1", nil),
ds: newDaemonSet("ds"),
shouldEnqueue: true,
},
}
for _, c := range cases {
manager, podControl, _ := newTestController()
manager.nodeStore.Add(c.oldNode)
manager.dsStore.Add(c.ds)
syncAndValidateDaemonSets(t, manager, c.ds, podControl, 0, 0)
manager.enqueueDaemonSet = func(ds *extensions.DaemonSet) {
if ds.Name == "ds" {
enqueued = true
}
}
enqueued = false
manager.updateNode(c.oldNode, c.newNode)
if enqueued != c.shouldEnqueue {
t.Errorf("Test case: '%s', expected: %t, got: %t", c.test, c.shouldEnqueue, enqueued)
}
}
}