github.com/crossplane/upjet@v1.3.0/pkg/controller/finalizer_tfpluginsdk.go (about)

     1  // SPDX-FileCopyrightText: 2023 The Crossplane Authors <https://crossplane.io>
     2  //
     3  // SPDX-License-Identifier: Apache-2.0
     4  
     5  package controller
     6  
     7  import (
     8  	"context"
     9  
    10  	xpresource "github.com/crossplane/crossplane-runtime/pkg/resource"
    11  	"github.com/pkg/errors"
    12  )
    13  
    14  const (
    15  	errRemoveTracker = "cannot remove tracker from the store"
    16  )
    17  
    18  // TrackerCleaner is the interface for the common finalizer of both Terraform
    19  // plugin SDK and framework managed resources.
    20  type TrackerCleaner interface {
    21  	RemoveTracker(obj xpresource.Object) error
    22  }
    23  
    24  // NewOperationTrackerFinalizer returns a new OperationTrackerFinalizer.
    25  func NewOperationTrackerFinalizer(tc TrackerCleaner, af xpresource.Finalizer) *OperationTrackerFinalizer {
    26  	return &OperationTrackerFinalizer{
    27  		Finalizer:      af,
    28  		OperationStore: tc,
    29  	}
    30  }
    31  
    32  // OperationTrackerFinalizer removes the operation tracker from the workspace store and only
    33  // then calls RemoveFinalizer of the underlying Finalizer.
    34  type OperationTrackerFinalizer struct {
    35  	xpresource.Finalizer
    36  	OperationStore TrackerCleaner
    37  }
    38  
    39  // AddFinalizer to the supplied Managed resource.
    40  func (nf *OperationTrackerFinalizer) AddFinalizer(ctx context.Context, obj xpresource.Object) error {
    41  	return nf.Finalizer.AddFinalizer(ctx, obj)
    42  }
    43  
    44  // RemoveFinalizer removes the workspace from workspace store before removing
    45  // the finalizer.
    46  func (nf *OperationTrackerFinalizer) RemoveFinalizer(ctx context.Context, obj xpresource.Object) error {
    47  	if err := nf.OperationStore.RemoveTracker(obj); err != nil {
    48  		return errors.Wrap(err, errRemoveTracker)
    49  	}
    50  	return nf.Finalizer.RemoveFinalizer(ctx, obj)
    51  }