From 29cef0eae41f33e3d3b40a54b533768aee1c99be Mon Sep 17 00:00:00 2001 From: Clint Shryock Date: Tue, 23 Jun 2015 11:26:13 -0500 Subject: [PATCH] builder/amazon-chroot: add mount_options configuration option --- builder/amazon/chroot/builder.go | 5 ++++- builder/amazon/chroot/step_mount_device.go | 13 +++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/builder/amazon/chroot/builder.go b/builder/amazon/chroot/builder.go index c5449a60a..636de8df7 100644 --- a/builder/amazon/chroot/builder.go +++ b/builder/amazon/chroot/builder.go @@ -35,6 +35,7 @@ type Config struct { MountPath string `mapstructure:"mount_path"` SourceAmi string `mapstructure:"source_ami"` RootVolumeSize int64 `mapstructure:"root_volume_size"` + MountOptions []string `mapstructure:"mount_options"` ctx interpolate.Context } @@ -165,7 +166,9 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe }, &StepAttachVolume{}, &StepEarlyUnflock{}, - &StepMountDevice{}, + &StepMountDevice{ + MountOptions: b.config.MountOptions, + }, &StepMountExtra{}, &StepCopyFiles{}, &StepChrootProvision{}, diff --git a/builder/amazon/chroot/step_mount_device.go b/builder/amazon/chroot/step_mount_device.go index cf10535df..8f7d27485 100644 --- a/builder/amazon/chroot/step_mount_device.go +++ b/builder/amazon/chroot/step_mount_device.go @@ -6,6 +6,7 @@ import ( "log" "os" "path/filepath" + "strings" "github.com/aws/aws-sdk-go/service/ec2" "github.com/mitchellh/multistep" @@ -23,7 +24,8 @@ type mountPathData struct { // mount_path string - The location where the volume was mounted. // mount_device_cleanup CleanupFunc - To perform early cleanup type StepMountDevice struct { - mountPath string + mountPath string + MountOptions []string } func (s *StepMountDevice) Run(state multistep.StateBag) multistep.StepAction { @@ -70,8 +72,15 @@ func (s *StepMountDevice) Run(state multistep.StateBag) multistep.StepAction { ui.Say("Mounting the root device...") stderr := new(bytes.Buffer) + + // build mount options from mount_options config, usefull for nouuid options + // or other specific device type settings for mount + opts := "" + if len(s.MountOptions) > 0 { + opts = "-o " + strings.Join(s.MountOptions, " -o ") + } mountCommand, err := wrappedCommand( - fmt.Sprintf("mount %s %s", deviceMount, mountPath)) + fmt.Sprintf("mount %s %s %s", opts, deviceMount, mountPath)) if err != nil { err := fmt.Errorf("Error creating mount command: %s", err) state.Put("error", err)