diff --git a/pkg/controller/daemon/controller.go b/pkg/controller/daemon/daemoncontroller.go similarity index 99% rename from pkg/controller/daemon/controller.go rename to pkg/controller/daemon/daemoncontroller.go index 773ec4e3acd..b5063f79766 100644 --- a/pkg/controller/daemon/controller.go +++ b/pkg/controller/daemon/daemoncontroller.go @@ -661,7 +661,7 @@ func (dsc *DaemonSetsController) syncDaemonSet(key string) error { return err } dsNeedsSync := dsc.expectations.SatisfiedExpectations(dsKey) - if dsNeedsSync { + if dsNeedsSync && ds.DeletionTimestamp == nil { dsc.manage(ds) } diff --git a/pkg/controller/daemon/controller_test.go b/pkg/controller/daemon/daemoncontroller_test.go similarity index 96% rename from pkg/controller/daemon/controller_test.go rename to pkg/controller/daemon/daemoncontroller_test.go index 090ae26aad4..5dd4048aa7d 100644 --- a/pkg/controller/daemon/controller_test.go +++ b/pkg/controller/daemon/daemoncontroller_test.go @@ -289,6 +289,24 @@ func TestSufficentCapacityNodeDaemonLaunchesPod(t *testing.T) { syncAndValidateDaemonSets(t, manager, ds, podControl, 1, 0) } +// DaemonSets not take any actions when being deleted +func TestDontDoAnythingIfBeingDeleted(t *testing.T) { + podSpec := resourcePodSpec("not-too-much-mem", "75M", "75m") + manager, podControl := newTestController() + node := newNode("not-too-much-mem", nil) + node.Status.Allocatable = allocatableResources("200M", "200m") + manager.nodeStore.Add(node) + manager.podStore.Add(&api.Pod{ + Spec: podSpec, + }) + ds := newDaemonSet("foo") + ds.Spec.Template.Spec = podSpec + now := unversioned.Now() + ds.DeletionTimestamp = &now + manager.dsStore.Add(ds) + syncAndValidateDaemonSets(t, manager, ds, podControl, 0, 0) +} + // DaemonSets should not place onto nodes that would cause port conflicts func TestPortConflictNodeDaemonDoesNotLaunchPod(t *testing.T) { podSpec := api.PodSpec{