diff --git a/pkg/kube/ready.go b/pkg/kube/ready.go index bdad3af08..d755d20f2 100644 --- a/pkg/kube/ready.go +++ b/pkg/kube/ready.go @@ -286,6 +286,12 @@ func (c *ReadyChecker) daemonSetReady(ds *appsv1.DaemonSet) bool { return true } + // the resource not generated by DaemonSet controller. + if ds.Status.ObservedGeneration == 0 { + c.log("DaemonSet is not ready: %s/%s, The most recent generation is 0.", ds.Namespace, ds.Name) + return false + } + // Make sure all the updated pods have been scheduled if ds.Status.UpdatedNumberScheduled != ds.Status.DesiredNumberScheduled { c.log("DaemonSet is not ready: %s/%s. %d out of %d expected pods have been scheduled", ds.Namespace, ds.Name, ds.Status.UpdatedNumberScheduled, ds.Status.DesiredNumberScheduled) diff --git a/pkg/kube/ready_test.go b/pkg/kube/ready_test.go index b5764ab68..e4e352d64 100644 --- a/pkg/kube/ready_test.go +++ b/pkg/kube/ready_test.go @@ -113,6 +113,13 @@ func Test_ReadyChecker_daemonSetReady(t *testing.T) { }, want: true, }, + { + name: "daemonset is not ready when ObservedGeneration is 0", + args: args{ + ds: newNotLoadDaemonSet("foo", 1, 1, 2, 2), + }, + want: false, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -391,10 +398,17 @@ func newDaemonSet(name string, maxUnavailable, numberReady, desiredNumberSchedul DesiredNumberScheduled: int32(desiredNumberScheduled), NumberReady: int32(numberReady), UpdatedNumberScheduled: int32(updatedNumberScheduled), + ObservedGeneration: int64(1), }, } } +func newNotLoadDaemonSet(name string, maxUnavailable, numberReady, desiredNumberScheduled, updatedNumberScheduled int) *appsv1.DaemonSet { + ds := newDaemonSet(name, maxUnavailable, numberReady, desiredNumberScheduled, updatedNumberScheduled) + ds.Status.ObservedGeneration = 0 + return ds +} + func newStatefulSet(name string, replicas, partition, readyReplicas, updatedReplicas int) *appsv1.StatefulSet { return &appsv1.StatefulSet{ ObjectMeta: metav1.ObjectMeta{ diff --git a/pkg/kube/wait.go b/pkg/kube/wait.go index 8928d6745..77afe6293 100644 --- a/pkg/kube/wait.go +++ b/pkg/kube/wait.go @@ -50,7 +50,7 @@ func (w *waiter) waitForResources(created ResourceList) error { ctx, cancel := context.WithTimeout(context.Background(), w.timeout) defer cancel() - return wait.PollImmediateUntil(2*time.Second, func() (bool, error) { + return wait.PollUntil(2*time.Second, func() (bool, error) { for _, v := range created { ready, err := w.c.IsReady(ctx, v) if !ready || err != nil {