From e7c1fa895506ecae25c638cdaa44f8bf060da4ba Mon Sep 17 00:00:00 2001 From: jackyu Date: Thu, 30 Jun 2022 16:35:15 +0800 Subject: [PATCH 1/3] bugfix: helm install --wait doesn't work Signed-off-by: jackyu --- pkg/kube/wait.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 { From 10137555a898e494c754dd2bbbc3e388d2c7e077 Mon Sep 17 00:00:00 2001 From: jackyu Date: Fri, 1 Jul 2022 15:21:42 +0800 Subject: [PATCH 2/3] check Status.ObservedGeneration of DaemonSet Signed-off-by: jackyu --- pkg/kube/ready.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/kube/ready.go b/pkg/kube/ready.go index 0554c1729..9930ac054 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) From f1cc105c3efa38f538290c3a8eeadf7a5d75fd7f Mon Sep 17 00:00:00 2001 From: jackyu Date: Tue, 5 Jul 2022 00:34:22 +0800 Subject: [PATCH 3/3] update test of DaemonSet in readyChecker Signed-off-by: jackyu --- pkg/kube/ready_test.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pkg/kube/ready_test.go b/pkg/kube/ready_test.go index 9fe20d8cb..ce64d6d29 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) { @@ -384,10 +391,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{