From 7f9d76cbf5c76f4c89dcb61151001220dd475161 Mon Sep 17 00:00:00 2001 From: James Bardin Date: Tue, 4 Dec 2018 15:39:46 -0500 Subject: [PATCH] add implied providers during import The CLI adds the provider references during import, but tests may not have them specified. --- terraform/context_import_test.go | 21 +++++++------------ .../import-provider-resource/main.tf | 7 +++++++ terraform/transform_import_state.go | 10 ++++++++- 3 files changed, 23 insertions(+), 15 deletions(-) create mode 100644 terraform/test-fixtures/import-provider-resource/main.tf diff --git a/terraform/context_import_test.go b/terraform/context_import_test.go index 1ebfb404c..619ae0c33 100644 --- a/terraform/context_import_test.go +++ b/terraform/context_import_test.go @@ -37,8 +37,7 @@ func TestContextImport_basic(t *testing.T) { Addr: addrs.RootModuleInstance.ResourceInstance( addrs.ManagedResourceMode, "aws_instance", "foo", addrs.NoKey, ), - ID: "bar", - ProviderAddr: addrs.RootModuleInstance.ProviderConfigDefault("aws"), + ID: "bar", }, }, }) @@ -77,8 +76,7 @@ func TestContextImport_countIndex(t *testing.T) { Addr: addrs.RootModuleInstance.ResourceInstance( addrs.ManagedResourceMode, "aws_instance", "foo", addrs.IntKey(0), ), - ID: "bar", - ProviderAddr: addrs.RootModuleInstance.ProviderConfigDefault("aws"), + ID: "bar", }, }, }) @@ -135,8 +133,7 @@ func TestContextImport_collision(t *testing.T) { Addr: addrs.RootModuleInstance.ResourceInstance( addrs.ManagedResourceMode, "aws_instance", "foo", addrs.NoKey, ), - ID: "bar", - ProviderAddr: addrs.RootModuleInstance.ProviderConfigDefault("aws"), + ID: "bar", }, }, }) @@ -179,8 +176,7 @@ func TestContextImport_missingType(t *testing.T) { Addr: addrs.RootModuleInstance.ResourceInstance( addrs.ManagedResourceMode, "aws_instance", "foo", addrs.NoKey, ), - ID: "bar", - ProviderAddr: addrs.RootModuleInstance.ProviderConfigDefault("aws"), + ID: "bar", }, }, }) @@ -233,8 +229,7 @@ func TestContextImport_moduleProvider(t *testing.T) { Addr: addrs.RootModuleInstance.ResourceInstance( addrs.ManagedResourceMode, "aws_instance", "foo", addrs.NoKey, ), - ID: "bar", - ProviderAddr: addrs.RootModuleInstance.ProviderConfigDefault("aws"), + ID: "bar", }, }, }) @@ -291,8 +286,7 @@ func TestContextImport_providerModule(t *testing.T) { Addr: addrs.RootModuleInstance.Child("child", addrs.NoKey).ResourceInstance( addrs.ManagedResourceMode, "aws_instance", "foo", addrs.NoKey, ), - ID: "bar", - ProviderAddr: addrs.RootModuleInstance.ProviderConfigDefault("aws"), + ID: "bar", }, }, }) @@ -349,8 +343,7 @@ func TestContextImport_providerVarConfig(t *testing.T) { Addr: addrs.RootModuleInstance.ResourceInstance( addrs.ManagedResourceMode, "aws_instance", "foo", addrs.NoKey, ), - ID: "bar", - ProviderAddr: addrs.RootModuleInstance.ProviderConfigDefault("aws"), + ID: "bar", }, }, }) diff --git a/terraform/test-fixtures/import-provider-resource/main.tf b/terraform/test-fixtures/import-provider-resource/main.tf new file mode 100644 index 000000000..70dc91857 --- /dev/null +++ b/terraform/test-fixtures/import-provider-resource/main.tf @@ -0,0 +1,7 @@ +provider "aws" { + foo = data.template_data_source.d.foo +} + +data "template_data_source" "d" { + foo = "bar" +} diff --git a/terraform/transform_import_state.go b/terraform/transform_import_state.go index ca038c82d..ab0ecae0a 100644 --- a/terraform/transform_import_state.go +++ b/terraform/transform_import_state.go @@ -16,10 +16,18 @@ type ImportStateTransformer struct { func (t *ImportStateTransformer) Transform(g *Graph) error { for _, target := range t.Targets { + // The ProviderAddr may not be supplied for non-aliased providers. + // This will be populated if the targets come from the cli, but tests + // may not specify implied provider addresses. + providerAddr := target.ProviderAddr + if providerAddr.ProviderConfig.Type == "" { + providerAddr = target.Addr.Resource.Resource.DefaultProviderConfig().Absolute(target.Addr.Module) + } + node := &graphNodeImportState{ Addr: target.Addr, ID: target.ID, - ProviderAddr: target.ProviderAddr, + ProviderAddr: providerAddr, } g.Add(node) }