Skip to content

Commit

Permalink
Use controller.OperationTrackerFinalizer for both of the Terraform pl…
Browse files Browse the repository at this point in the history
…ugin SDK &

framework based managed resources.

Signed-off-by: Alper Rifat Ulucinar <ulucinar@users.noreply.github.com>
  • Loading branch information
ulucinar committed Feb 1, 2024
1 parent d717974 commit 6c26c90
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 15 deletions.
6 changes: 5 additions & 1 deletion pkg/config/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -313,13 +313,17 @@ func NewProvider(schema []byte, prefix string, modulePath string, metadata []byt
// if in both of the include lists, the new behavior prevails
isTerraformPluginSDK := matches(name, p.TerraformPluginSDKIncludeList)
isPluginFrameworkResource := matches(name, p.TerraformPluginFrameworkIncludeList)
isCLIResource := matches(name, p.IncludeList)
if (isTerraformPluginSDK && isPluginFrameworkResource) || (isTerraformPluginSDK && isCLIResource) || (isPluginFrameworkResource && isCLIResource) {
panic(errors.Errorf(`resource %q is specified in more than one include list. It should appear in at most one of the lists "IncludeList", "TerraformPluginSDKIncludeList" or "TerraformPluginFrameworkIncludeList"`, name))
}
if len(terraformResource.Schema) == 0 || matches(name, p.SkipList) || (!matches(name, p.IncludeList) && !isTerraformPluginSDK && !isPluginFrameworkResource) {
p.skippedResourceNames = append(p.skippedResourceNames, name)
continue
}
if isTerraformPluginSDK {
if p.TerraformProvider == nil || p.TerraformProvider.ResourcesMap[name] == nil {
panic(errors.Errorf("resource %q is configured to be reconciled without the Terraform CLI"+
panic(errors.Errorf("resource %q is configured to be reconciled with Terraform Plugin SDK"+
"but either config.Provider.TerraformProvider is not configured or the Go schema does not exist for the resource", name))
}
terraformResource = p.TerraformProvider.ResourcesMap[name]
Expand Down
14 changes: 7 additions & 7 deletions pkg/controller/finalizer_tfpluginsdk.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,29 @@ type TrackerCleaner interface {
RemoveTracker(obj xpresource.Object) error
}

// NewTerraformPluginSDKFinalizer returns a new TerraformPluginSDKFinalizer.
func NewTerraformPluginSDKFinalizer(tc TrackerCleaner, af xpresource.Finalizer) *TerraformPluginSDKFinalizer {
return &TerraformPluginSDKFinalizer{
// NewOperationTrackerFinalizer returns a new OperationTrackerFinalizer.
func NewOperationTrackerFinalizer(tc TrackerCleaner, af xpresource.Finalizer) *OperationTrackerFinalizer {
return &OperationTrackerFinalizer{
Finalizer: af,
OperationStore: tc,
}
}

// TerraformPluginSDKFinalizer removes the operation tracker from the workspace store and only
// OperationTrackerFinalizer removes the operation tracker from the workspace store and only
// then calls RemoveFinalizer of the underlying Finalizer.
type TerraformPluginSDKFinalizer struct {
type OperationTrackerFinalizer struct {
xpresource.Finalizer
OperationStore TrackerCleaner
}

// AddFinalizer to the supplied Managed resource.
func (nf *TerraformPluginSDKFinalizer) AddFinalizer(ctx context.Context, obj xpresource.Object) error {
func (nf *OperationTrackerFinalizer) AddFinalizer(ctx context.Context, obj xpresource.Object) error {
return nf.Finalizer.AddFinalizer(ctx, obj)
}

// RemoveFinalizer removes the workspace from workspace store before removing
// the finalizer.
func (nf *TerraformPluginSDKFinalizer) RemoveFinalizer(ctx context.Context, obj xpresource.Object) error {
func (nf *OperationTrackerFinalizer) RemoveFinalizer(ctx context.Context, obj xpresource.Object) error {
if err := nf.OperationStore.RemoveTracker(obj); err != nil {
return errors.Wrap(err, errRemoveTracker)
}
Expand Down
12 changes: 5 additions & 7 deletions pkg/pipeline/templates/controller.go.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,11 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error {
),
managed.WithLogger(o.Logger.WithValues("controller", name)),
managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))),
{{- if .UseTerraformPluginSDKClient }}
{{- if .UseAsync }}
managed.WithFinalizer(tjcontroller.NewTerraformPluginSDKFinalizer(o.OperationTrackerStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))),
{{- end }}
{{- else }}
managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))),
{{- end }}
{{- if or .UseTerraformPluginSDKClient .UseTerraformPluginFrameworkClient }}
managed.WithFinalizer(tjcontroller.NewOperationTrackerFinalizer(o.OperationTrackerStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))),
{{- else }}
managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))),
{{- end }}
managed.WithTimeout(3*time.Minute),
managed.WithInitializers(initializers),
managed.WithConnectionPublishers(cps...),
Expand Down

0 comments on commit 6c26c90

Please sign in to comment.