diff --git a/internal/builtin/providers/terraform/provider.go b/internal/builtin/providers/terraform/provider.go index 8a724087ae..7c43991753 100644 --- a/internal/builtin/providers/terraform/provider.go +++ b/internal/builtin/providers/terraform/provider.go @@ -119,7 +119,11 @@ func (p *Provider) ApplyResourceChange(req providers.ApplyResourceChangeRequest) } // ImportResourceState requests that the given resource be imported. -func (p *Provider) ImportResourceState(providers.ImportResourceStateRequest) providers.ImportResourceStateResponse { +func (p *Provider) ImportResourceState(req providers.ImportResourceStateRequest) providers.ImportResourceStateResponse { + if req.TypeName == "terraform_data" { + return importDataStore(req) + } + panic("unimplemented - terraform_remote_state has no resources") } diff --git a/internal/builtin/providers/terraform/resource_data.go b/internal/builtin/providers/terraform/resource_data.go index eb39f3ed66..b7b67df822 100644 --- a/internal/builtin/providers/terraform/resource_data.go +++ b/internal/builtin/providers/terraform/resource_data.go @@ -146,3 +146,24 @@ func applyDataStoreResourceChange(req providers.ApplyResourceChangeRequest) (res return resp } + +// TODO: This isn't very useful even for examples, because terraform_data has +// no way to refresh the full resource value from only the import ID. This +// minimal implementation allows the import to succeed, and can be extended +// once the configuration is available during import. +func importDataStore(req providers.ImportResourceStateRequest) (resp providers.ImportResourceStateResponse) { + schema := dataStoreResourceSchema() + v := cty.ObjectVal(map[string]cty.Value{ + "id": cty.StringVal(req.ID), + }) + state, err := schema.Block.CoerceValue(v) + resp.Diagnostics = resp.Diagnostics.Append(err) + + resp.ImportedResources = []providers.ImportedResource{ + { + TypeName: req.TypeName, + State: state, + }, + } + return resp +}