From 65077c9580912c2e433c803bc937399435132724 Mon Sep 17 00:00:00 2001 From: Amanpreet Singh Date: Wed, 22 May 2019 15:28:36 +0100 Subject: [PATCH] Render filenames when using template_dir - Fixes #61 --- template/resource_template_dir.go | 8 +++++++- template/resource_template_dir_test.go | 12 +++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/template/resource_template_dir.go b/template/resource_template_dir.go index 63a2f18d..7cc243c4 100644 --- a/template/resource_template_dir.go +++ b/template/resource_template_dir.go @@ -105,7 +105,13 @@ func resourceTemplateDirCreate(d *schema.ResourceData, meta interface{}) error { return nil } - relPath, _ := filepath.Rel(sourceDir, p) + // Render destination filename + pRendered, err := execute(p, vars) + if err != nil { + return templateRenderError(fmt.Errorf("failed to render filename %v: %v", p, err)) + } + + relPath, _ := filepath.Rel(sourceDir, pRendered) return generateDirFile(p, path.Join(destinationDir, relPath), f, vars) }) if err != nil { diff --git a/template/resource_template_dir_test.go b/template/resource_template_dir_test.go index 716a5f0a..efe59112 100644 --- a/template/resource_template_dir_test.go +++ b/template/resource_template_dir_test.go @@ -20,6 +20,7 @@ resource "template_dir" "dir" { }` type testTemplate struct { + filename string template string want string } @@ -55,9 +56,10 @@ func TestTemplateDirRendering(t *testing.T) { }{ { files: map[string]testTemplate{ - "foo.txt": {"${bar}", "bar"}, - "nested/monkey.txt": {"ooh-ooh-ooh-eee-eee", "ooh-ooh-ooh-eee-eee"}, - "maths.txt": {"${1+2+3}", "6"}, + "${bar}.txt": {"bar.txt", "foo ${bar}", "foo bar"}, + "foo.txt": {"foo.txt", "${bar}", "bar"}, + "nested/monkey.txt": {"nested/monkey.txt", "ooh-ooh-ooh-eee-eee", "ooh-ooh-ooh-eee-eee"}, + "maths.txt": {"maths.txt", "${1+2+3}", "6"}, }, vars: `{bar = "bar"}`, }, @@ -80,8 +82,8 @@ func TestTemplateDirRendering(t *testing.T) { { Config: fmt.Sprintf(templateDirRenderingConfig, in, out, tt.vars), Check: func(s *terraform.State) error { - for name, file := range tt.files { - content, err := ioutil.ReadFile(filepath.Join(out, name)) + for _, file := range tt.files { + content, err := ioutil.ReadFile(filepath.Join(out, file.filename)) if err != nil { return fmt.Errorf("template:\n%s\nvars:\n%s\ngot:\n%s\nwant:\n%s\n", file.template, tt.vars, err, file.want) }