From 6d0fa84e2c8833e6052df1998edcb6c45594fd77 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 9 May 2013 13:19:38 -0700 Subject: [PATCH] builder/amazonebs: Read config --- builder/amazonebs/builder.go | 28 +++++++++++++++++++---- builder/amazonebs/builder_test.go | 38 +++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/builder/amazonebs/builder.go b/builder/amazonebs/builder.go index e2f5ddb41..1c8c2b0c3 100644 --- a/builder/amazonebs/builder.go +++ b/builder/amazonebs/builder.go @@ -1,22 +1,40 @@ package amazonebs import ( + "encoding/json" + "errors" "github.com/mitchellh/packer/packer" ) type config struct { - AccessKey string + AccessKey string `json:"access_key"` Region string - SecretKey string - SourceAmi string + SecretKey string `json:"secret_key"` + SourceAmi string `json:"source_ami"` } type Builder struct { config config } -func (*Builder) Prepare(interface{}) error { - return nil +func (b *Builder) Prepare(raw interface{}) (err error) { + _, ok := raw.(map[string]interface{}) + if !ok { + err = errors.New("configuration isn't a valid map") + return + } + + jsonBytes, err := json.Marshal(raw) + if err != nil { + return + } + + err = json.Unmarshal(jsonBytes, &b.config) + if err != nil { + return + } + + return } func (*Builder) Run(packer.Build, packer.Ui) {} diff --git a/builder/amazonebs/builder_test.go b/builder/amazonebs/builder_test.go index 47f96fc79..2a56c0e4f 100644 --- a/builder/amazonebs/builder_test.go +++ b/builder/amazonebs/builder_test.go @@ -12,3 +12,41 @@ func TestBuilder_ImplementsBuilder(t *testing.T) { var actual packer.Builder assert.Implementor(&Builder{}, &actual, "should be a Builder") } + +func TestBuilder_Prepare_NotMap(t *testing.T) { + assert := asserts.NewTestingAsserts(t, true) + + b := &Builder{} + err := b.Prepare(42) + assert.NotNil(err, "should have an error") + assert.Equal(err.Error(), "configuration isn't a valid map", "config is not a map") +} + +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") +} + +func TestBuilder_Prepare_Good(t *testing.T) { + assert := asserts.NewTestingAsserts(t, true) + + b := &Builder{} + c := map[string]interface{} { + "access_key": "foo", + "secret_key": "bar", + "source_ami": "123456", + } + + err := b.Prepare(c) + assert.Nil(err, "should not have an error") + assert.Equal(b.config.AccessKey, "foo", "should be valid access key") + assert.Equal(b.config.SecretKey, "bar", "should be valid secret key") + assert.Equal(b.config.SourceAmi, "123456", "should have source AMI") +}