builder/amazonebs: Read config
This commit is contained in:
parent
9600bf5b4b
commit
6d0fa84e2c
|
@ -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) {}
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue