Skip to content

Commit 40ed2cc

Browse files
authored
Merge pull request #1396 from fluxcd/remove-legacy-adoption
Remove adoption of resources in old API versions
2 parents dacd7ea + 5941e33 commit 40ed2cc

File tree

4 files changed

+9
-369
lines changed

4 files changed

+9
-369
lines changed

internal/controller/helmrelease_controller.go

Lines changed: 0 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
"github.com/fluxcd/cli-utils/pkg/kstatus/polling/engine"
2828
celtypes "github.com/google/cel-go/common/types"
2929
chart "helm.sh/helm/v4/pkg/chart/v2"
30-
helmrelease "helm.sh/helm/v4/pkg/release/v1"
3130
corev1 "k8s.io/api/core/v1"
3231
apiequality "k8s.io/apimachinery/pkg/api/equality"
3332
apierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -70,9 +69,7 @@ import (
7069
"github.com/fluxcd/helm-controller/internal/features"
7170
"github.com/fluxcd/helm-controller/internal/kube"
7271
"github.com/fluxcd/helm-controller/internal/loader"
73-
"github.com/fluxcd/helm-controller/internal/postrender"
7472
intreconcile "github.com/fluxcd/helm-controller/internal/reconcile"
75-
"github.com/fluxcd/helm-controller/internal/release"
7673
)
7774

7875
// +kubebuilder:rbac:groups=helm.toolkit.fluxcd.io,resources=helmreleases,verbs=get;list;watch;create;update;patch;delete
@@ -369,19 +366,6 @@ func (r *HelmReleaseReconciler) reconcileRelease(ctx context.Context,
369366
conditions.MarkUnknown(obj, meta.ReadyCondition, meta.ProgressingReason, "reconciliation in progress")
370367
}
371368

372-
// Keep feature flagged code paths separate from the main reconciliation
373-
// logic to ensure easy removal when the feature flag is removed.
374-
if ok, _ := features.Enabled(features.AdoptLegacyReleases); ok {
375-
// Attempt to adopt "legacy" v2beta1 release state on a best-effort basis.
376-
// If this fails, the controller will fall back to performing an upgrade
377-
// to settle on the desired state.
378-
// TODO(hidde): remove this in a future release.
379-
if err := r.adoptLegacyRelease(ctx, getter, statusReader, obj); err != nil {
380-
log.Error(err, "failed to adopt v2beta1 release state")
381-
}
382-
r.adoptPostRenderersStatus(obj)
383-
}
384-
385369
// If the release target configuration has changed, we need to uninstall the
386370
// previous release target first. If we did not do this, the installation would
387371
// fail due to resources already existing.
@@ -681,81 +665,6 @@ func (r *HelmReleaseReconciler) evalReadyExpr(
681665
return celExpr.EvaluateBoolean(ctx, vars)
682666
}
683667

684-
// adoptLegacyRelease attempts to adopt a v2beta1 release into a v2
685-
// release.
686-
// This is done by retrieving the last successful release from the Helm storage
687-
// and converting it to a v2 release snapshot.
688-
// If the v2beta1 release has already been adopted, this function is a no-op.
689-
func (r *HelmReleaseReconciler) adoptLegacyRelease(ctx context.Context,
690-
getter genericclioptions.RESTClientGetter, statusReader engine.StatusReader, obj *v2.HelmRelease) error {
691-
692-
if obj.Status.LastReleaseRevision < 1 || len(obj.Status.History) > 0 {
693-
return nil
694-
}
695-
696-
var (
697-
log = ctrl.LoggerFrom(ctx).V(logger.DebugLevel)
698-
storageNamespace = obj.GetStorageNamespace()
699-
releaseNamespace = obj.GetReleaseNamespace()
700-
releaseName = obj.GetReleaseName()
701-
version = obj.Status.LastReleaseRevision
702-
)
703-
704-
log.Info("adopting %s/%s.v%d release from v2beta1 state", releaseNamespace, releaseName, version)
705-
706-
// Construct config factory for current release.
707-
cfg, err := action.NewConfigFactory(getter,
708-
action.WithStorage(action.DefaultStorageDriver, storageNamespace),
709-
action.WithStorageLog(action.NewTraceLogger(ctx)),
710-
action.WithStatusReader(statusReader),
711-
)
712-
if err != nil {
713-
return err
714-
}
715-
716-
// Get the last successful release based on the observation for the v2beta1
717-
// object.
718-
rls, err := cfg.NewStorage().Get(releaseName, version)
719-
if err != nil {
720-
return err
721-
}
722-
723-
// Convert it to a v2 release snapshot.
724-
rlsTyped, ok := rls.(*helmrelease.Release)
725-
if !ok {
726-
return fmt.Errorf("only the Chart API v2 is supported")
727-
}
728-
snap := release.ObservedToSnapshot(release.ObserveRelease(rlsTyped))
729-
730-
// If tests are enabled, include them as well.
731-
if obj.GetTest().Enable {
732-
snap.SetTestHooks(release.TestHooksFromRelease(rlsTyped))
733-
}
734-
735-
// Adopt it as the current release in the history.
736-
obj.Status.History = append(obj.Status.History, snap)
737-
obj.Status.StorageNamespace = storageNamespace
738-
739-
// Erase the last release revision from the status.
740-
obj.Status.LastReleaseRevision = 0
741-
742-
return nil
743-
}
744-
745-
// adoptPostRenderersStatus attempts to set obj.Status.ObservedPostRenderersDigest
746-
// for v2beta1 and v2beta2 HelmReleases.
747-
func (*HelmReleaseReconciler) adoptPostRenderersStatus(obj *v2.HelmRelease) {
748-
if obj.GetGeneration() != obj.Status.ObservedGeneration {
749-
return
750-
}
751-
752-
// if we have a reconciled object with PostRenderers not reflected in the
753-
// status, we need to update the status.
754-
if obj.Spec.PostRenderers != nil && obj.Status.ObservedPostRenderersDigest == "" {
755-
obj.Status.ObservedPostRenderersDigest = postrender.Digest(digest.Canonical, obj.Spec.PostRenderers).String()
756-
}
757-
}
758-
759668
func (r *HelmReleaseReconciler) buildRESTClientGetter(ctx context.Context, obj *v2.HelmRelease) (genericclioptions.RESTClientGetter, error) {
760669
opts := []kube.Option{
761670
kube.WithNamespace(obj.GetReleaseNamespace()),

0 commit comments

Comments
 (0)