packer: default user var values needn't be strings [GH-456]
This commit is contained in:
parent
9cb397339a
commit
f0d0621855
|
@ -1,6 +1,8 @@
|
|||
## 0.3.9 (unreleased)
|
||||
|
||||
BUG FIXES:
|
||||
|
||||
* core: default user variable values don't need to be strings. [GH-456]
|
||||
|
||||
## 0.3.8 (September 22, 2013)
|
||||
|
||||
|
|
|
@ -124,18 +124,24 @@ func ParseTemplate(data []byte) (t *Template, err error) {
|
|||
// Gather all the variables
|
||||
for k, v := range rawTpl.Variables {
|
||||
var variable RawVariable
|
||||
variable.Default = ""
|
||||
variable.Required = v == nil
|
||||
|
||||
if v != nil {
|
||||
def, ok := v.(string)
|
||||
if !ok {
|
||||
errors = append(errors,
|
||||
fmt.Errorf("variable '%s': default value must be string or null", k))
|
||||
continue
|
||||
}
|
||||
// Create a new mapstructure decoder in order to decode the default
|
||||
// value since this is the only value in the regular template that
|
||||
// can be weakly typed.
|
||||
decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
|
||||
Result: &variable.Default,
|
||||
WeaklyTypedInput: true,
|
||||
})
|
||||
if err != nil {
|
||||
// This should never happen.
|
||||
panic(err)
|
||||
}
|
||||
|
||||
variable.Default = def
|
||||
err = decoder.Decode(v)
|
||||
if err != nil {
|
||||
errors = append(errors,
|
||||
fmt.Errorf("Error decoding default value for user var '%s': %s", k, err))
|
||||
}
|
||||
|
||||
t.Variables[k] = variable
|
||||
|
|
|
@ -391,7 +391,8 @@ func TestParseTemplate_Variables(t *testing.T) {
|
|||
{
|
||||
"variables": {
|
||||
"foo": "bar",
|
||||
"bar": null
|
||||
"bar": null,
|
||||
"baz": 27
|
||||
},
|
||||
|
||||
"builders": [{"type": "something"}]
|
||||
|
@ -403,7 +404,7 @@ func TestParseTemplate_Variables(t *testing.T) {
|
|||
t.Fatalf("err: %s", err)
|
||||
}
|
||||
|
||||
if result.Variables == nil || len(result.Variables) != 2 {
|
||||
if result.Variables == nil || len(result.Variables) != 3 {
|
||||
t.Fatalf("bad vars: %#v", result.Variables)
|
||||
}
|
||||
|
||||
|
@ -422,6 +423,14 @@ func TestParseTemplate_Variables(t *testing.T) {
|
|||
if !result.Variables["bar"].Required {
|
||||
t.Fatal("bar should be required")
|
||||
}
|
||||
|
||||
if result.Variables["baz"].Default != "27" {
|
||||
t.Fatal("default should be empty")
|
||||
}
|
||||
|
||||
if result.Variables["baz"].Required {
|
||||
t.Fatal("baz should not be required")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseTemplate_variablesBadDefault(t *testing.T) {
|
||||
|
|
Loading…
Reference in New Issue