From d0e5c3cc7b8e9d67da129a89ce19d5ea1a2a717f Mon Sep 17 00:00:00 2001 From: Daniel Schmidt Date: Mon, 7 Jul 2025 14:34:53 +0200 Subject: [PATCH] address review feedback --- docs/plugin-protocol/tfplugin5.proto | 1 - docs/plugin-protocol/tfplugin6.proto | 2 -- internal/grpcwrap/provider.go | 20 +++++++++++++------- internal/grpcwrap/provider6.go | 20 +++++++++++++------- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/docs/plugin-protocol/tfplugin5.proto b/docs/plugin-protocol/tfplugin5.proto index 4f0f94e43a..bd73a6626f 100644 --- a/docs/plugin-protocol/tfplugin5.proto +++ b/docs/plugin-protocol/tfplugin5.proto @@ -190,7 +190,6 @@ message ActionSchema { } } - // Schema is the configuration schema for a Resource, Provider, or Provisioner. message Schema { message Block { diff --git a/docs/plugin-protocol/tfplugin6.proto b/docs/plugin-protocol/tfplugin6.proto index f8a19ef8bc..8fc3dbfc2b 100644 --- a/docs/plugin-protocol/tfplugin6.proto +++ b/docs/plugin-protocol/tfplugin6.proto @@ -189,8 +189,6 @@ message ActionSchema { } } - - // Schema is the configuration schema for a Resource or Provider. message Schema { message Block { diff --git a/internal/grpcwrap/provider.go b/internal/grpcwrap/provider.go index 0f2b869e62..ad5f6020f4 100644 --- a/internal/grpcwrap/provider.go +++ b/internal/grpcwrap/provider.go @@ -884,28 +884,34 @@ func (p *provider) PlanAction(_ context.Context, req *tfplugin5.PlanAction_Reque priorState, err := decodeDynamicValue(lr.PriorState, linkedResourceTy) if err != nil { - return nil, fmt.Errorf("failed to decode prior state for linked resource #%d (%q) in action %q: %w", i+1, linkedResouceSchemas[i].TypeName, req.ActionType, err) + return nil, fmt.Errorf("failed to decode prior state for linked resource #%d (%q) in action %q: %w", i, linkedResouceSchemas[i].TypeName, req.ActionType, err) } config, err := decodeDynamicValue(lr.Config, linkedResourceTy) if err != nil { - return nil, fmt.Errorf("failed to decode config for linked resource #%d (%q) in action %q: %w", i+1, linkedResouceSchemas[i].TypeName, req.ActionType, err) + return nil, fmt.Errorf("failed to decode config for linked resource #%d (%q) in action %q: %w", i, linkedResouceSchemas[i].TypeName, req.ActionType, err) } var priorIdentity cty.Value if lr.PriorIdentity != nil && lr.PriorIdentity.IdentityData != nil { priorIdentity, err = decodeDynamicValue(lr.PriorIdentity.IdentityData, linkedResourceIdentityTy) if err != nil { - return nil, fmt.Errorf("failed to decode prior identity for linked resource #%d (%q) in action %q: %w", i+1, linkedResouceSchemas[i].TypeName, req.ActionType, err) + return nil, fmt.Errorf("failed to decode prior identity for linked resource #%d (%q) in action %q: %w", i, linkedResouceSchemas[i].TypeName, req.ActionType, err) } } else { priorIdentity = cty.NullVal(linkedResourceIdentityTy) } + plannedState, err := decodeDynamicValue(lr.PlannedState, linkedResourceTy) + if err != nil { + return nil, fmt.Errorf("failed to decode planned state for linked resource #%d (%q) in action %q: %w", i, linkedResouceSchemas[i].TypeName, req.ActionType, err) + } + inputLinkedResources = append(inputLinkedResources, providers.LinkedResourcePlanData{ PriorState: priorState, Config: config, PriorIdentity: priorIdentity, + PlannedState: plannedState, }) } @@ -976,24 +982,24 @@ func (p *provider) InvokeAction(req *tfplugin5.InvokeAction_Request, server tfpl priorState, err := decodeDynamicValue(lr.PriorState, linkedResourceTy) if err != nil { - return fmt.Errorf("failed to decode prior state for linked resource #%d (%q) in action %q: %w", i+1, linkedResourceSchemas[i].TypeName, req.ActionType, err) + return fmt.Errorf("failed to decode prior state for linked resource #%d (%q) in action %q: %w", i, linkedResourceSchemas[i].TypeName, req.ActionType, err) } plannedState, err := decodeDynamicValue(lr.PlannedState, linkedResourceTy) if err != nil { - return fmt.Errorf("failed to decode planned state for linked resource #%d (%q) in action %q: %w", i+1, linkedResourceSchemas[i].TypeName, req.ActionType, err) + return fmt.Errorf("failed to decode planned state for linked resource #%d (%q) in action %q: %w", i, linkedResourceSchemas[i].TypeName, req.ActionType, err) } config, err := decodeDynamicValue(lr.Config, linkedResourceTy) if err != nil { - return fmt.Errorf("failed to decode config for linked resource #%d (%q) in action %q: %w", i+1, linkedResourceSchemas[i].TypeName, req.ActionType, err) + return fmt.Errorf("failed to decode config for linked resource #%d (%q) in action %q: %w", i, linkedResourceSchemas[i].TypeName, req.ActionType, err) } plannedIdentity := cty.NullVal(linkedResourceIdentityTy) if lr.PlannedIdentity != nil && lr.PlannedIdentity.IdentityData != nil { plannedIdentity, err = decodeDynamicValue(lr.PlannedIdentity.IdentityData, linkedResourceIdentityTy) if err != nil { - return fmt.Errorf("failed to decode planned identity for linked resource #%d (%q) in action %q: %w", i+1, linkedResourceSchemas[i].TypeName, req.ActionType, err) + return fmt.Errorf("failed to decode planned identity for linked resource #%d (%q) in action %q: %w", i, linkedResourceSchemas[i].TypeName, req.ActionType, err) } } diff --git a/internal/grpcwrap/provider6.go b/internal/grpcwrap/provider6.go index e92e708e27..3a0583e9ca 100644 --- a/internal/grpcwrap/provider6.go +++ b/internal/grpcwrap/provider6.go @@ -955,28 +955,34 @@ func (p *provider6) PlanAction(_ context.Context, req *tfplugin6.PlanAction_Requ priorState, err := decodeDynamicValue6(lr.PriorState, linkedResourceTy) if err != nil { - return nil, fmt.Errorf("failed to decode prior state for linked resource #%d (%q) in action %q: %w", i+1, linkedResouceSchemas[i].TypeName, req.ActionType, err) + return nil, fmt.Errorf("failed to decode prior state for linked resource #%d (%q) in action %q: %w", i, linkedResouceSchemas[i].TypeName, req.ActionType, err) } config, err := decodeDynamicValue6(lr.Config, linkedResourceTy) if err != nil { - return nil, fmt.Errorf("failed to decode config for linked resource #%d (%q) in action %q: %w", i+1, linkedResouceSchemas[i].TypeName, req.ActionType, err) + return nil, fmt.Errorf("failed to decode config for linked resource #%d (%q) in action %q: %w", i, linkedResouceSchemas[i].TypeName, req.ActionType, err) } var priorIdentity cty.Value if lr.PriorIdentity != nil && lr.PriorIdentity.IdentityData != nil { priorIdentity, err = decodeDynamicValue6(lr.PriorIdentity.IdentityData, linkedResourceIdentityTy) if err != nil { - return nil, fmt.Errorf("failed to decode prior identity for linked resource #%d (%q) in action %q: %w", i+1, linkedResouceSchemas[i].TypeName, req.ActionType, err) + return nil, fmt.Errorf("failed to decode prior identity for linked resource #%d (%q) in action %q: %w", i, linkedResouceSchemas[i].TypeName, req.ActionType, err) } } else { priorIdentity = cty.NullVal(linkedResourceIdentityTy) } + plannedState, err := decodeDynamicValue6(lr.PlannedState, linkedResourceTy) + if err != nil { + return nil, fmt.Errorf("failed to decode planned state for linked resource #%d (%q) in action %q: %w", i, linkedResouceSchemas[i].TypeName, req.ActionType, err) + } + inputLinkedResources = append(inputLinkedResources, providers.LinkedResourcePlanData{ PriorState: priorState, Config: config, PriorIdentity: priorIdentity, + PlannedState: plannedState, }) } @@ -1047,24 +1053,24 @@ func (p *provider6) InvokeAction(req *tfplugin6.InvokeAction_Request, server tfp priorState, err := decodeDynamicValue6(lr.PriorState, linkedResourceTy) if err != nil { - return fmt.Errorf("failed to decode prior state for linked resource #%d (%q) in action %q: %w", i+1, linkedResourceSchemas[i].TypeName, req.ActionType, err) + return fmt.Errorf("failed to decode prior state for linked resource #%d (%q) in action %q: %w", i, linkedResourceSchemas[i].TypeName, req.ActionType, err) } plannedState, err := decodeDynamicValue6(lr.PlannedState, linkedResourceTy) if err != nil { - return fmt.Errorf("failed to decode planned state for linked resource #%d (%q) in action %q: %w", i+1, linkedResourceSchemas[i].TypeName, req.ActionType, err) + return fmt.Errorf("failed to decode planned state for linked resource #%d (%q) in action %q: %w", i, linkedResourceSchemas[i].TypeName, req.ActionType, err) } config, err := decodeDynamicValue6(lr.Config, linkedResourceTy) if err != nil { - return fmt.Errorf("failed to decode config for linked resource #%d (%q) in action %q: %w", i+1, linkedResourceSchemas[i].TypeName, req.ActionType, err) + return fmt.Errorf("failed to decode config for linked resource #%d (%q) in action %q: %w", i, linkedResourceSchemas[i].TypeName, req.ActionType, err) } plannedIdentity := cty.NullVal(linkedResourceIdentityTy) if lr.PlannedIdentity != nil && lr.PlannedIdentity.IdentityData != nil { plannedIdentity, err = decodeDynamicValue6(lr.PlannedIdentity.IdentityData, linkedResourceIdentityTy) if err != nil { - return fmt.Errorf("failed to decode planned identity for linked resource #%d (%q) in action %q: %w", i+1, linkedResourceSchemas[i].TypeName, req.ActionType, err) + return fmt.Errorf("failed to decode planned identity for linked resource #%d (%q) in action %q: %w", i, linkedResourceSchemas[i].TypeName, req.ActionType, err) } }