diff --git a/internal/plugin/grpc_provider.go b/internal/plugin/grpc_provider.go index fccd44288a..b3b15a0b53 100644 --- a/internal/plugin/grpc_provider.go +++ b/internal/plugin/grpc_provider.go @@ -622,6 +622,9 @@ func (p *GRPCProvider) ImportResourceState(r providers.ImportResourceStateReques protoReq := &proto.ImportResourceState_Request{ TypeName: r.TypeName, Id: r.ID, + ClientCapabilities: &proto.ClientCapabilities{ + DeferralAllowed: r.ClientCapabilities.DeferralAllowed, + }, } protoResp, err := p.client.ImportResourceState(p.ctx, protoReq) @@ -630,6 +633,7 @@ func (p *GRPCProvider) ImportResourceState(r providers.ImportResourceStateReques return resp } resp.Diagnostics = resp.Diagnostics.Append(convert.ProtoToDiagnostics(protoResp.Diagnostics)) + resp.Deferred = convert.ProtoToDeferred(protoResp.Deferred) for _, imported := range protoResp.ImportedResources { resource := providers.ImportedResource{ diff --git a/internal/plugin6/grpc_provider.go b/internal/plugin6/grpc_provider.go index b7db286da8..52b620f8b4 100644 --- a/internal/plugin6/grpc_provider.go +++ b/internal/plugin6/grpc_provider.go @@ -611,6 +611,9 @@ func (p *GRPCProvider) ImportResourceState(r providers.ImportResourceStateReques protoReq := &proto6.ImportResourceState_Request{ TypeName: r.TypeName, Id: r.ID, + ClientCapabilities: &proto6.ClientCapabilities{ + DeferralAllowed: r.ClientCapabilities.DeferralAllowed, + }, } protoResp, err := p.client.ImportResourceState(p.ctx, protoReq) @@ -619,6 +622,7 @@ func (p *GRPCProvider) ImportResourceState(r providers.ImportResourceStateReques return resp } resp.Diagnostics = resp.Diagnostics.Append(convert.ProtoToDiagnostics(protoResp.Diagnostics)) + resp.Deferred = convert.ProtoToDeferred(protoResp.Deferred) for _, imported := range protoResp.ImportedResources { resource := providers.ImportedResource{ diff --git a/internal/providers/provider.go b/internal/providers/provider.go index 5efdfb1439..b40847948c 100644 --- a/internal/providers/provider.go +++ b/internal/providers/provider.go @@ -425,6 +425,9 @@ type ImportResourceStateRequest struct { // ID is a string with which the provider can identify the resource to be // imported. ID string + + // ClientCapabilities contains information about the client's capabilities. + ClientCapabilities ClientCapabilities } type ImportResourceStateResponse struct { @@ -436,6 +439,10 @@ type ImportResourceStateResponse struct { // Diagnostics contains any warnings or errors from the method call. Diagnostics tfdiags.Diagnostics + + // Deferred if present signals that the provider was not able to fully + // complete this operation and a susequent run is required. + Deferred *Deferred } // ImportedResource represents an object being imported into Terraform with the