Merge pull request #10297 from hashicorp/b-template-path

providers/template: disallow file paths in `template`
This commit is contained in:
Mitchell Hashimoto 2016-11-23 08:27:56 -08:00 committed by GitHub
commit 68c96e0ce5
2 changed files with 7 additions and 46 deletions

View File

@ -25,7 +25,6 @@ func dataSourceFile() *schema.Resource {
Optional: true, Optional: true,
Description: "Contents of the template", Description: "Contents of the template",
ConflictsWith: []string{"filename"}, ConflictsWith: []string{"filename"},
ValidateFunc: validateTemplateAttribute,
}, },
"filename": &schema.Schema{ "filename": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
@ -82,13 +81,14 @@ func renderFile(d *schema.ResourceData) (string, error) {
filename := d.Get("filename").(string) filename := d.Get("filename").(string)
vars := d.Get("vars").(map[string]interface{}) vars := d.Get("vars").(map[string]interface{})
contents := template
if template == "" && filename != "" { if template == "" && filename != "" {
template = filename data, _, err := pathorcontents.Read(filename)
} if err != nil {
return "", err
}
contents, _, err := pathorcontents.Read(template) contents = data
if err != nil {
return "", err
} }
rendered, err := execute(contents, vars) rendered, err := execute(contents, vars)
@ -145,20 +145,6 @@ func hash(s string) string {
return hex.EncodeToString(sha[:]) return hex.EncodeToString(sha[:])
} }
func validateTemplateAttribute(v interface{}, key string) (ws []string, es []error) {
_, wasPath, err := pathorcontents.Read(v.(string))
if err != nil {
es = append(es, err)
return
}
if wasPath {
ws = append(ws, fmt.Sprintf("%s: looks like you specified a path instead of file contents. Use `file()` to load this path. Specifying a path directly is deprecated and will be removed in a future version.", key))
}
return
}
func validateVarsAttribute(v interface{}, key string) (ws []string, es []error) { func validateVarsAttribute(v interface{}, key string) (ws []string, es []error) {
// vars can only be primitives right now // vars can only be primitives right now
var badVars []string var badVars []string

View File

@ -2,8 +2,6 @@ package template
import ( import (
"fmt" "fmt"
"io/ioutil"
"os"
"strings" "strings"
"sync" "sync"
"testing" "testing"
@ -26,6 +24,7 @@ func TestTemplateRendering(t *testing.T) {
{`{a="foo"}`, `$${a}`, `foo`}, {`{a="foo"}`, `$${a}`, `foo`},
{`{a="hello"}`, `$${replace(a, "ello", "i")}`, `hi`}, {`{a="hello"}`, `$${replace(a, "ello", "i")}`, `hi`},
{`{}`, `${1+2+3}`, `6`}, {`{}`, `${1+2+3}`, `6`},
{`{}`, `/`, `/`},
} }
for _, tt := range cases { for _, tt := range cases {
@ -47,30 +46,6 @@ func TestTemplateRendering(t *testing.T) {
} }
} }
func TestValidateTemplateAttribute(t *testing.T) {
file, err := ioutil.TempFile("", "testtemplate")
if err != nil {
t.Fatal(err)
}
file.WriteString("Hello world.")
file.Close()
defer os.Remove(file.Name())
ws, es := validateTemplateAttribute(file.Name(), "test")
if len(es) != 0 {
t.Fatalf("Unexpected errors: %#v", es)
}
if len(ws) != 1 {
t.Fatalf("Expected 1 warning, got %d", len(ws))
}
if !strings.Contains(ws[0], "Specifying a path directly is deprecated") {
t.Fatalf("Expected warning about path, got: %s", ws[0])
}
}
func TestValidateVarsAttribute(t *testing.T) { func TestValidateVarsAttribute(t *testing.T) {
cases := map[string]struct { cases := map[string]struct {
Vars map[string]interface{} Vars map[string]interface{}