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)
|
## 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)
|
## 0.3.8 (September 22, 2013)
|
||||||
|
|
||||||
|
|
|
@ -124,18 +124,24 @@ func ParseTemplate(data []byte) (t *Template, err error) {
|
||||||
// Gather all the variables
|
// Gather all the variables
|
||||||
for k, v := range rawTpl.Variables {
|
for k, v := range rawTpl.Variables {
|
||||||
var variable RawVariable
|
var variable RawVariable
|
||||||
variable.Default = ""
|
|
||||||
variable.Required = v == nil
|
variable.Required = v == nil
|
||||||
|
|
||||||
if v != nil {
|
// Create a new mapstructure decoder in order to decode the default
|
||||||
def, ok := v.(string)
|
// value since this is the only value in the regular template that
|
||||||
if !ok {
|
// can be weakly typed.
|
||||||
errors = append(errors,
|
decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
|
||||||
fmt.Errorf("variable '%s': default value must be string or null", k))
|
Result: &variable.Default,
|
||||||
continue
|
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
|
t.Variables[k] = variable
|
||||||
|
|
|
@ -391,7 +391,8 @@ func TestParseTemplate_Variables(t *testing.T) {
|
||||||
{
|
{
|
||||||
"variables": {
|
"variables": {
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
"bar": null
|
"bar": null,
|
||||||
|
"baz": 27
|
||||||
},
|
},
|
||||||
|
|
||||||
"builders": [{"type": "something"}]
|
"builders": [{"type": "something"}]
|
||||||
|
@ -403,7 +404,7 @@ func TestParseTemplate_Variables(t *testing.T) {
|
||||||
t.Fatalf("err: %s", err)
|
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)
|
t.Fatalf("bad vars: %#v", result.Variables)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -422,6 +423,14 @@ func TestParseTemplate_Variables(t *testing.T) {
|
||||||
if !result.Variables["bar"].Required {
|
if !result.Variables["bar"].Required {
|
||||||
t.Fatal("bar should be 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) {
|
func TestParseTemplate_variablesBadDefault(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue