builder/amazon/chroot: more settings, validation

This commit is contained in:
Mitchell Hashimoto 2013-07-30 09:55:17 -07:00
parent cffb35ab33
commit ec526d97aa
3 changed files with 37 additions and 3 deletions

View File

@ -25,6 +25,9 @@ type Config struct {
awscommon.AccessConfig `mapstructure:",squash"` awscommon.AccessConfig `mapstructure:",squash"`
SourceAmi string `mapstructure:"source_ami"` SourceAmi string `mapstructure:"source_ami"`
AttachedDevicePath string `mapstructure:"attached_device_path"`
DevicePath string `mapstructure:"device_path"`
MountPath string `mapstructure:"mount_path"`
} }
type Builder struct { type Builder struct {
@ -39,11 +42,22 @@ func (b *Builder) Prepare(raws ...interface{}) error {
} }
// Defaults // Defaults
if b.config.DevicePath == "" {
b.config.DevicePath = "/dev/sdh"
}
if b.config.MountPath == "" {
b.config.MountPath = "/var/packer-amazon-chroot/volumes/{{.Device}}"
}
// Accumulate any errors // Accumulate any errors
errs := common.CheckUnusedConfig(md) errs := common.CheckUnusedConfig(md)
errs = packer.MultiErrorAppend(errs, b.config.AccessConfig.Prepare()...) errs = packer.MultiErrorAppend(errs, b.config.AccessConfig.Prepare()...)
if b.config.SourceAmi == "" {
errs = packer.MultiErrorAppend(errs, errors.New("source_ami is required."))
}
if errs != nil && len(errs.Errors) > 0 { if errs != nil && len(errs.Errors) > 0 {
return errs return errs
} }

View File

@ -6,7 +6,9 @@ import (
) )
func testConfig() map[string]interface{} { func testConfig() map[string]interface{} {
return map[string]interface{}{} return map[string]interface{}{
"source_ami": "foo",
}
} }
func TestBuilder_ImplementsBuilder(t *testing.T) { func TestBuilder_ImplementsBuilder(t *testing.T) {
@ -16,3 +18,20 @@ func TestBuilder_ImplementsBuilder(t *testing.T) {
t.Fatalf("Builder should be a builder") t.Fatalf("Builder should be a builder")
} }
} }
func TestBuilderPrepare_SourceAmi(t *testing.T) {
b := &Builder{}
config := testConfig()
config["source_ami"] = ""
err := b.Prepare(config)
if err == nil {
t.Fatal("should have error")
}
config["source_ami"] = "foo"
err = b.Prepare(config)
if err != nil {
t.Errorf("err: %s", err)
}
}

View File

@ -20,12 +20,13 @@ type StepAttachVolume struct {
} }
func (s *StepAttachVolume) Run(state map[string]interface{}) multistep.StepAction { func (s *StepAttachVolume) Run(state map[string]interface{}) multistep.StepAction {
config := state["config"].(*Config)
ec2conn := state["ec2"].(*ec2.EC2) ec2conn := state["ec2"].(*ec2.EC2)
instance := state["instance"].(*ec2.Instance) instance := state["instance"].(*ec2.Instance)
ui := state["ui"].(packer.Ui) ui := state["ui"].(packer.Ui)
volumeId := state["volume_id"].(string) volumeId := state["volume_id"].(string)
device := "/dev/sdh" device := config.DevicePath
ui.Say("Attaching the root volume...") ui.Say("Attaching the root volume...")
_, err := ec2conn.AttachVolume(volumeId, instance.InstanceId, device) _, err := ec2conn.AttachVolume(volumeId, instance.InstanceId, device)