Skip to content

Commit

Permalink
Remove PRC Dispatch provider
Browse files Browse the repository at this point in the history
  • Loading branch information
VenelinMartinov committed Jan 27, 2025
1 parent b3ac253 commit 3821588
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 106 deletions.
16 changes: 1 addition & 15 deletions pkg/tfshim/sdk-v2/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
testing "github.com/mitchellh/go-testing-interface"
"github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"

shim "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfshim"
)
Expand Down Expand Up @@ -52,24 +51,11 @@ func diffToShim(d *terraform.InstanceDiff) shim.InstanceDiff {
}

type v2Provider struct {
tf *schema.Provider
opts []providerOption
tf *schema.Provider
}

var _ shim.Provider = (*v2Provider)(nil)

func NewProvider(p *schema.Provider, opts ...providerOption) shim.Provider {
prov := v2Provider{
tf: p,
opts: opts,
}

o, err := getProviderOptions(opts)
contract.AssertNoErrorf(err, "provider options failed to apply")

return newProviderWithPlanResourceChange(p, prov, func(s string) bool { return true }, o.planStateEdit)
}

func (p v2Provider) Schema() shim.SchemaMap {
return v2SchemaMap(p.tf.Schema)
}
Expand Down
101 changes: 10 additions & 91 deletions pkg/tfshim/sdk-v2/provider2.go
Original file line number Diff line number Diff line change
Expand Up @@ -954,80 +954,6 @@ type planResourceChangeProvider interface {
Importer(t string) shim.ImportFunc
}

// Wraps a provider to redirect select resources to use a PlanResourceChange strategy.
type providerWithPlanResourceChangeDispatch struct {
// Fallback provider to dispatch calls to.
shim.Provider

// All resources to serve schema.
resources map[string]*schema.Resource

// Provider handling resources that use PlanResourceChange.
planResourceChangeProvider planResourceChangeProvider

// Predicate that returns true for TF resource names that should use PlanResourceChange.
usePlanResourceChange func(resourceName string) bool
}

// This provider needs to override ResourceMap because it uses a different concrete implementation
// of shim.Resource and for select resources and needs to make sure the correct one is returned.
func (p *providerWithPlanResourceChangeDispatch) ResourcesMap() shim.ResourceMap {
return &v2ResourceCustomMap{
resources: p.resources,
pack: func(token string, res *schema.Resource) shim.Resource {
if p.usePlanResourceChange(token) {
i := p.planResourceChangeProvider.Importer(token)
return &v2Resource2{v2Resource{res}, i, token}
}
return v2Resource{res}
},
}
}

// Override Diff method to dispatch appropriately.
func (p *providerWithPlanResourceChangeDispatch) Diff(
ctx context.Context,
t string,
s shim.InstanceState,
c shim.ResourceConfig,
opts shim.DiffOptions,
) (shim.InstanceDiff, error) {
if p.usePlanResourceChange(t) {
return p.planResourceChangeProvider.Diff(ctx, t, s, c, opts)
}
return p.Provider.Diff(ctx, t, s, c, opts)
}

// Override Apply method to dispatch appropriately.
func (p *providerWithPlanResourceChangeDispatch) Apply(
ctx context.Context, t string, s shim.InstanceState, d shim.InstanceDiff,
) (shim.InstanceState, error) {
if p.usePlanResourceChange(t) {
return p.planResourceChangeProvider.Apply(ctx, t, s, d)
}
return p.Provider.Apply(ctx, t, s, d)
}

// Override Refresh method to dispatch appropriately.
func (p *providerWithPlanResourceChangeDispatch) Refresh(
ctx context.Context, t string, s shim.InstanceState, c shim.ResourceConfig,
) (shim.InstanceState, error) {
if p.usePlanResourceChange(t) {
return p.planResourceChangeProvider.Refresh(ctx, t, s, c)
}
return p.Provider.Refresh(ctx, t, s, c)
}

// Override NewDestroyDiff to dispatch appropriately.
func (p *providerWithPlanResourceChangeDispatch) NewDestroyDiff(
ctx context.Context, t string, opts shim.TimeoutOptions,
) shim.InstanceDiff {
if p.usePlanResourceChange(t) {
return p.planResourceChangeProvider.NewDestroyDiff(ctx, t, opts)
}
return p.Provider.NewDestroyDiff(ctx, t, opts)
}

type v2ResourceCustomMap struct {
resources map[string]*schema.Resource
pack func(string, *schema.Resource) shim.Resource
Expand Down Expand Up @@ -1070,24 +996,17 @@ func (m *v2ResourceCustomMap) Set(key string, value shim.Resource) {
}
}

func newProviderWithPlanResourceChange(
p *schema.Provider,
prov shim.Provider,
filter func(string) bool,
planEditFunc PlanStateEditFunc,
) shim.Provider {
return &providerWithPlanResourceChangeDispatch{
Provider: prov,
resources: p.ResourcesMap,
planResourceChangeProvider: &planResourceChangeImpl{
planEditFunc: planEditFunc,
tf: p,
server: &grpcServer{
gserver: p.GRPCProvider().(*schema.GRPCProviderServer),
},
resources: p.ResourcesMap,
func NewProvider(p *schema.Provider, opts ...providerOption) shim.Provider {
o, err := getProviderOptions(opts)
contract.AssertNoErrorf(err, "provider options failed to apply")

return &planResourceChangeImpl{
planEditFunc: o.planStateEdit,
tf: p,
server: &grpcServer{
gserver: p.GRPCProvider().(*schema.GRPCProviderServer),
},
usePlanResourceChange: filter,
resources: p.ResourcesMap,
}
}

Expand Down

0 comments on commit 3821588

Please sign in to comment.