diff --git a/builder/amazonebs/builder.go b/builder/amazonebs/builder.go index 7305dfe84..227514836 100644 --- a/builder/amazonebs/builder.go +++ b/builder/amazonebs/builder.go @@ -6,21 +6,21 @@ package amazonebs import ( - "encoding/json" "fmt" "github.com/mitchellh/goamz/aws" "github.com/mitchellh/goamz/ec2" + "github.com/mitchellh/mapstructure" "github.com/mitchellh/packer/packer" "log" "time" ) type config struct { - AccessKey string `json:"access_key"` - AMIName string `json:"ami_name"` + AccessKey string `mapstructure:"access_key"` + AMIName string `mapstructure:"ami_name"` Region string - SecretKey string `json:"secret_key"` - SourceAmi string `json:"source_ami"` + SecretKey string `mapstructure:"secret_key"` + SourceAmi string `mapstructure:"source_ami"` } type Builder struct { @@ -28,16 +28,7 @@ type Builder struct { } func (b *Builder) Prepare(raw interface{}) (err error) { - // Marshal and unmarshal the raw configuration as a way to get it - // into our "config" struct. - // TODO: Use the reflection package and provide this as an API for - // better error messages - jsonBytes, err := json.Marshal(raw) - if err != nil { - return - } - - err = json.Unmarshal(jsonBytes, &b.config) + err = mapstructure.Decode(raw, &b.config) if err != nil { return } diff --git a/builder/amazonebs/builder_test.go b/builder/amazonebs/builder_test.go index c54a352f3..ee0090f28 100644 --- a/builder/amazonebs/builder_test.go +++ b/builder/amazonebs/builder_test.go @@ -14,15 +14,15 @@ func TestBuilder_ImplementsBuilder(t *testing.T) { } func TestBuilder_Prepare_BadType(t *testing.T) { - assert := asserts.NewTestingAsserts(t, true) - b := &Builder{} c := map[string]interface{}{ "access_key": []string{}, } err := b.Prepare(c) - assert.NotNil(err, "should have an error") + if err == nil { + t.Fatalf("prepare should fail") + } } func TestBuilder_Prepare_Good(t *testing.T) {