From 4223e5bccaed6f5fb8e4e61c981934f05da24014 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 8 Jun 2013 17:46:34 -0700 Subject: [PATCH] builder/amazonebs: Additional validation --- builder/amazonebs/builder.go | 15 +++++-- builder/amazonebs/builder_test.go | 75 +++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 3 deletions(-) diff --git a/builder/amazonebs/builder.go b/builder/amazonebs/builder.go index 488a26845..afdb0a3cf 100644 --- a/builder/amazonebs/builder.go +++ b/builder/amazonebs/builder.go @@ -60,15 +60,24 @@ func (b *Builder) Prepare(raw interface{}) (err error) { errs = append(errs, errors.New("A secret_key must be specified")) } + if b.config.SourceAmi == "" { + errs = append(errs, errors.New("A source_ami must be specified")) + } + + if b.config.InstanceType == "" { + errs = append(errs, errors.New("An instance_type must be specified")) + } + + if b.config.SSHUsername == "" { + errs = append(errs, errors.New("An ssh_username must be specified")) + } + if len(errs) > 0 { return &packer.MultiError{errs} } // TODO: config validation and asking for fields: // * region (exists and valid) - // * source ami - // * instance type - // * SSH username log.Printf("Config: %+v", b.config) return diff --git a/builder/amazonebs/builder_test.go b/builder/amazonebs/builder_test.go index f5ed944f4..8d89f8c43 100644 --- a/builder/amazonebs/builder_test.go +++ b/builder/amazonebs/builder_test.go @@ -9,6 +9,9 @@ func testConfig() map[string]interface{} { return map[string]interface{}{ "access_key": "foo", "secret_key": "bar", + "source_ami": "foo", + "instance_type": "foo", + "ssh_username": "root", } } @@ -56,6 +59,30 @@ func TestBuilderPrepare_AccessKey(t *testing.T) { } } +func TestBuilderPrepare_InstanceType(t *testing.T) { + var b Builder + config := testConfig() + + // Test good + config["instance_type"] = "foo" + err := b.Prepare(config) + if err != nil { + t.Fatalf("should not have error: %s", err) + } + + if b.config.InstanceType != "foo" { + t.Errorf("invalid: %s", b.config.InstanceType) + } + + // Test bad + delete(config, "instance_type") + b = Builder{} + err = b.Prepare(config) + if err == nil { + t.Fatal("should have error") + } +} + func TestBuilderPrepare_SecretKey(t *testing.T) { var b Builder config := testConfig() @@ -80,6 +107,30 @@ func TestBuilderPrepare_SecretKey(t *testing.T) { } } +func TestBuilderPrepare_SourceAmi(t *testing.T) { + var b Builder + config := testConfig() + + // Test good + config["source_ami"] = "foo" + err := b.Prepare(config) + if err != nil { + t.Fatalf("should not have error: %s", err) + } + + if b.config.SourceAmi != "foo" { + t.Errorf("invalid: %s", b.config.SourceAmi) + } + + // Test bad + delete(config, "source_ami") + b = Builder{} + err = b.Prepare(config) + if err == nil { + t.Fatal("should have error") + } +} + func TestBuilderPrepare_SSHPort(t *testing.T) { var b Builder config := testConfig() @@ -106,3 +157,27 @@ func TestBuilderPrepare_SSHPort(t *testing.T) { t.Errorf("invalid: %d", b.config.SSHPort) } } + +func TestBuilderPrepare_SSHUsername(t *testing.T) { + var b Builder + config := testConfig() + + // Test good + config["ssh_username"] = "foo" + err := b.Prepare(config) + if err != nil { + t.Fatalf("should not have error: %s", err) + } + + if b.config.SSHUsername != "foo" { + t.Errorf("invalid: %s", b.config.SSHUsername) + } + + // Test bad + delete(config, "ssh_username") + b = Builder{} + err = b.Prepare(config) + if err == nil { + t.Fatal("should have error") + } +}