diff --git a/config/module/test-fixtures/change-intermediate-source/a/b/main.tf b/config/module/test-fixtures/change-intermediate-source/a/b/main.tf new file mode 100644 index 0000000000..b91fad57a4 --- /dev/null +++ b/config/module/test-fixtures/change-intermediate-source/a/b/main.tf @@ -0,0 +1 @@ +resource "test_resource" "a-b" {} diff --git a/config/module/test-fixtures/change-intermediate-source/a/main.tf b/config/module/test-fixtures/change-intermediate-source/a/main.tf new file mode 100644 index 0000000000..acbf03927e --- /dev/null +++ b/config/module/test-fixtures/change-intermediate-source/a/main.tf @@ -0,0 +1,3 @@ +module "b" { + source = "./b" +} diff --git a/config/module/test-fixtures/change-intermediate-source/c/b/main.tf b/config/module/test-fixtures/change-intermediate-source/c/b/main.tf new file mode 100644 index 0000000000..5a3565b33f --- /dev/null +++ b/config/module/test-fixtures/change-intermediate-source/c/b/main.tf @@ -0,0 +1 @@ +resource "test_resource" "c-b" {} diff --git a/config/module/test-fixtures/change-intermediate-source/c/main.tf b/config/module/test-fixtures/change-intermediate-source/c/main.tf new file mode 100644 index 0000000000..acbf03927e --- /dev/null +++ b/config/module/test-fixtures/change-intermediate-source/c/main.tf @@ -0,0 +1,3 @@ +module "b" { + source = "./b" +} diff --git a/config/module/test-fixtures/change-intermediate-source/main.tf b/config/module/test-fixtures/change-intermediate-source/main.tf new file mode 100644 index 0000000000..2326ee22ac --- /dev/null +++ b/config/module/test-fixtures/change-intermediate-source/main.tf @@ -0,0 +1,3 @@ +module "a" { + source = "./a" +} diff --git a/config/module/test-fixtures/change-intermediate-source/main.tf.disabled b/config/module/test-fixtures/change-intermediate-source/main.tf.disabled new file mode 100644 index 0000000000..52dabca933 --- /dev/null +++ b/config/module/test-fixtures/change-intermediate-source/main.tf.disabled @@ -0,0 +1,3 @@ +module "a" { + source = "./c" +} diff --git a/config/module/tree_test.go b/config/module/tree_test.go index 705f90859a..26a1729775 100644 --- a/config/module/tree_test.go +++ b/config/module/tree_test.go @@ -724,7 +724,71 @@ func TestTreeLoad_conflictingSubmoduleNames(t *testing.T) { t.Fatal("found wrong resource in b/c:", res.Name) } } + } + } +} + +// changing the source for a module but not the module "path" +func TestTreeLoad_changeIntermediateSource(t *testing.T) { + // copy the config to our tempdir this time, since we're going to edit it + td, err := ioutil.TempDir("", "tf") + if err != nil { + t.Fatalf("err: %s", err) + } + defer os.RemoveAll(td) + + if err := copyDir(td, filepath.Join(fixtureDir, "change-intermediate-source")); err != nil { + t.Fatal(err) + } + + wd, err := os.Getwd() + if err != nil { + t.Fatal(err) + } + if err := os.Chdir(td); err != nil { + t.Fatal(err) + } + defer os.Chdir(wd) + + if err := os.MkdirAll(".terraform/modules", 0777); err != nil { + t.Fatal(err) + } + storage := &getter.FolderStorage{StorageDir: ".terraform/modules"} + cfg, err := config.LoadDir("./") + if err != nil { + t.Fatal(err) + } + tree := NewTree("", cfg) + if err := tree.Load(storage, GetModeGet); err != nil { + t.Fatalf("load failed: %s", err) + } + + // now we change the source of our module, without changing its path + if err := os.Rename("main.tf.disabled", "main.tf"); err != nil { + t.Fatal(err) + } + + // reload the tree + cfg, err = config.LoadDir("./") + if err != nil { + t.Fatal(err) + } + tree = NewTree("", cfg) + if err := tree.Load(storage, GetModeGet); err != nil { + t.Fatalf("load failed: %s", err) + } + // check for our resource in b + for _, c := range tree.Children() { + for _, gc := range c.Children() { + if len(gc.config.Resources) != 1 { + t.Fatalf("expected 1 resource in %s, got %d", gc.name, len(gc.config.Resources)) + } + res := gc.config.Resources[0] + expected := "c-b" + if res.Name != expected { + t.Fatalf("expexted resource %q, got %q", expected, res.Name) + } } } }