Skip to content

Commit 68d22c6

Browse files
authored
Merge pull request #7259 from k0sproject/backport-7252-to-release-1.34
[Backport release-1.34] Remove retry cap when waiting for Helm CRDs
2 parents ec8150e + d404cbb commit 68d22c6

2 files changed

Lines changed: 23 additions & 15 deletions

File tree

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ require (
5757
golang.org/x/sync v0.19.0
5858
golang.org/x/sys v0.40.0
5959
golang.org/x/text v0.33.0
60+
golang.org/x/time v0.12.0
6061
golang.org/x/tools v0.40.0
6162
google.golang.org/grpc v1.76.0
6263
helm.sh/helm/v3 v3.19.3
@@ -258,7 +259,6 @@ require (
258259
golang.org/x/net v0.48.0 // indirect
259260
golang.org/x/oauth2 v0.30.0 // indirect
260261
golang.org/x/term v0.39.0 // indirect
261-
golang.org/x/time v0.12.0 // indirect
262262
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
263263
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
264264
google.golang.org/genproto/googleapis/api v0.0.0-20250804133106-a7a43d27e69b // indirect

pkg/component/controller/extensions_controller.go

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515
"slices"
1616
"time"
1717

18-
"github.com/avast/retry-go"
1918
"github.com/bombsimon/logrusr/v4"
2019
"github.com/k0sproject/k0s/internal/pkg/templatewriter"
2120
helmv1beta1 "github.com/k0sproject/k0s/pkg/apis/helm/v1beta1"
@@ -28,9 +27,11 @@ import (
2827
kubeutil "github.com/k0sproject/k0s/pkg/kubernetes"
2928
"github.com/k0sproject/k0s/pkg/leaderelection"
3029
"github.com/sirupsen/logrus"
30+
"golang.org/x/time/rate"
3131
"helm.sh/helm/v3/pkg/release"
3232
"helm.sh/helm/v3/pkg/storage/driver"
3333
apierrors "k8s.io/apimachinery/pkg/api/errors"
34+
"k8s.io/apimachinery/pkg/api/meta"
3435
"k8s.io/apimachinery/pkg/runtime/schema"
3536
"k8s.io/apimachinery/pkg/types"
3637
"k8s.io/client-go/tools/clientcmd"
@@ -414,10 +415,6 @@ func (ec *ExtensionsController) instantiateManager(ctx context.Context) (crman.M
414415
if err != nil {
415416
return nil, fmt.Errorf("can't build controller-runtime controller for helm extensions: %w", err)
416417
}
417-
gk := schema.GroupKind{
418-
Group: helmv1beta1.GroupName,
419-
Kind: "Chart",
420-
}
421418

422419
mgr, err := controllerruntime.NewManager(clientConfig, crman.Options{
423420
Scheme: k0sscheme.Scheme,
@@ -430,16 +427,27 @@ func (ec *ExtensionsController) instantiateManager(ctx context.Context) (crman.M
430427
if err != nil {
431428
return nil, fmt.Errorf("can't build controller-runtime controller for helm extensions: %w", err)
432429
}
433-
if err := retry.Do(func() error {
434-
_, err := mgr.GetRESTMapper().RESTMapping(gk)
435-
if err != nil {
436-
ec.L.Warn("Extensions CRD is not yet ready, waiting before starting ExtensionsController")
437-
return err
430+
431+
for chart, sometimes := (schema.GroupKind{Group: helmv1beta1.GroupName, Kind: "Chart"}), (&rate.Sometimes{Every: 5}); ; {
432+
_, err := mgr.GetRESTMapper().RESTMapping(chart)
433+
if err == nil {
434+
ec.L.Info(chart, " CRD is ready, going nuts")
435+
break
436+
}
437+
438+
sometimes.Do(func() {
439+
if meta.IsNoMatchError(err) {
440+
ec.L.Warn(chart, " CRD is not yet ready, waiting before starting ExtensionsController")
441+
} else {
442+
ec.L.WithError(err).Error("Failed to check for ", chart, " CRD readiness")
443+
}
444+
})
445+
446+
select {
447+
case <-time.After(2 * time.Second):
448+
case <-ctx.Done():
449+
return nil, fmt.Errorf("while waiting for %s CRD: %w (last error: %w)", chart, context.Cause(ctx), err)
438450
}
439-
ec.L.Info("Extensions CRD is ready, going nuts")
440-
return nil
441-
}, retry.Context(ctx)); err != nil {
442-
return nil, fmt.Errorf("can't start ExtensionsReconciler, helm CRD is not registered, check CRD registration reconciler: %w", err)
443451
}
444452

445453
if err := builder.

0 commit comments

Comments
 (0)