@@ -10,7 +10,7 @@ import (
1010 "github.com/codeready-toolchain/host-operator/controllers/toolchainconfig"
1111 "github.com/codeready-toolchain/host-operator/pkg/templates/nstemplatetiers"
1212 "github.com/codeready-toolchain/toolchain-common/pkg/condition"
13- "github.com/redhat-cop/operator-utils /pkg/util "
13+ "github.com/codeready-toolchain/toolchain-common /pkg/finalizers "
1414 corev1 "k8s.io/api/core/v1"
1515
1616 "k8s.io/apimachinery/pkg/api/errors"
@@ -29,6 +29,10 @@ import (
2929
3030// SetupWithManager sets up the controller with the Manager.
3131func (r * Reconciler ) SetupWithManager (mgr manager.Manager ) error {
32+ if err := r .RegisterFinalizers (); err != nil {
33+ return err
34+ }
35+
3236 return ctrl .NewControllerManagedBy (mgr ).
3337 For (& toolchainv1alpha1.NSTemplateTier {}, builder .WithPredicates (predicate.GenerationChangedPredicate {})).
3438 Watches (& toolchainv1alpha1.TierTemplate {},
@@ -38,15 +42,24 @@ func (r *Reconciler) SetupWithManager(mgr manager.Manager) error {
3842
3943// Reconciler reconciles a NSTemplateTier object (only when this latter's specs were updated)
4044type Reconciler struct {
41- Client runtimeclient.Client
42- Scheme * runtime.Scheme
45+ Client runtimeclient.Client
46+ Scheme * runtime.Scheme
47+ finalizers finalizers.Finalizers
4348}
4449
4550//+kubebuilder:rbac:groups=toolchain.dev.openshift.com,resources=nstemplatetiers,verbs=get;list;watch;create;update;patch;delete
4651//+kubebuilder:rbac:groups=toolchain.dev.openshift.com,resources=spaces,verbs=get;list;watch
4752//+kubebuilder:rbac:groups=toolchain.dev.openshift.com,resources=nstemplatetiers/status,verbs=get;update;patch
4853//+kubebuilder:rbac:groups=toolchain.dev.openshift.com,resources=nstemplatetiers/finalizers,verbs=update
4954
55+ // RegisterFinalizers should only be called from the unit tests. At runtime, it is called during SetupWithManager.
56+ func (r * Reconciler ) RegisterFinalizers () error {
57+ if err := r .finalizers .RegisterWithStandardName (& nsTemplateTierUsedFinalizer {Client : r .Client }); err != nil {
58+ return fmt .Errorf ("failed to register the NSTemplateTier finalizer (this should not happen): %w" , err )
59+ }
60+ return nil
61+ }
62+
5063// Reconcile takes care of fetching the NSTemplateTier
5164func (r * Reconciler ) Reconcile (ctx context.Context , request ctrl.Request ) (ctrl.Result , error ) {
5265 logger := log .FromContext (ctx )
@@ -62,9 +75,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, request ctrl.Request) (ctrl.
6275 logger .Error (err , "unable to get the current NSTemplateTier" )
6376 return reconcile.Result {}, fmt .Errorf ("unable to get the current NSTemplateTier: %w" , err )
6477 }
65- // if the NSTemplateTier is being deleted, then do nothing
66- if util .IsBeingDeleted (tier ) {
67- return reconcile.Result {}, nil
78+ if updated , err := r .finalizers .FinalizeAndUpdate (ctx , r .Client , tier ); updated || err != nil {
79+ return reconcile.Result {}, err
6880 }
6981
7082 _ , err := toolchainconfig .GetToolchainConfig (r .Client )
@@ -183,7 +195,6 @@ func (r *Reconciler) ensureTTRforTemplate(ctx context.Context, nsTmplTier *toolc
183195 return false , "" , err
184196 }
185197 return true , ttrName , nil
186-
187198}
188199
189200func (r * Reconciler ) createNewTierTemplateRevision (ctx context.Context , nsTmplTier * toolchainv1alpha1.NSTemplateTier , tierTemplate * toolchainv1alpha1.TierTemplate ) (string , error ) {
0 commit comments