provider/template: warn when template specified as path
Turns out the BC code allowed users to move from `filename` to `template` to squash the warning without having to switch from template paths to template contents. Here we warn when `template` is specified as a path so we can remove the functionality in the future and remove this source of confusion. refs #3732
This commit is contained in:
parent
2dc1c022d3
commit
0036db8f82
|
@ -29,6 +29,7 @@ func resourceFile() *schema.Resource {
|
||||||
Description: "Contents of the template",
|
Description: "Contents of the template",
|
||||||
ForceNew: true,
|
ForceNew: true,
|
||||||
ConflictsWith: []string{"filename"},
|
ConflictsWith: []string{"filename"},
|
||||||
|
ValidateFunc: validateTemplateAttribute,
|
||||||
},
|
},
|
||||||
"filename": &schema.Schema{
|
"filename": &schema.Schema{
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
|
@ -174,3 +175,17 @@ func hash(s string) string {
|
||||||
sha := sha256.Sum256([]byte(s))
|
sha := sha256.Sum256([]byte(s))
|
||||||
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
|
||||||
|
}
|
||||||
|
|
|
@ -2,6 +2,9 @@ package template
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
@ -77,6 +80,30 @@ func TestTemplateVariableChange(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])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// This test covers a panic due to config.Func formerly being a
|
// This test covers a panic due to config.Func formerly being a
|
||||||
// shared map, causing multiple template_file resources to try and
|
// shared map, causing multiple template_file resources to try and
|
||||||
// accessing it parallel during their lang.Eval() runs.
|
// accessing it parallel during their lang.Eval() runs.
|
||||||
|
|
Loading…
Reference in New Issue