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 }