diff --git a/CHANGELOG.md b/CHANGELOG.md index d84de8567..9781fa9d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ## 0.4.0 (unreleased) +FEATURES: + +* builder/amazon/ebs: Ability to specify which availability zone to create + instance in. [GH-536] + BUG FIXES: * core: Won't panic when writing to a bad pipe. [GH-560] diff --git a/builder/amazon/common/run_config.go b/builder/amazon/common/run_config.go index b21999260..8025cf0f0 100644 --- a/builder/amazon/common/run_config.go +++ b/builder/amazon/common/run_config.go @@ -23,6 +23,7 @@ type RunConfig struct { SubnetId string `mapstructure:"subnet_id"` TemporaryKeyPairName string `mapstructure:"temporary_key_pair_name"` VpcId string `mapstructure:"vpc_id"` + AvailZone string `mapstructure:"avail_zone"` // Unexported fields that are calculated from others sshTimeout time.Duration @@ -83,6 +84,7 @@ func (c *RunConfig) Prepare(t *packer.ConfigTemplate) []error { "subnet_id": &c.SubnetId, "temporary_key_pair_name": &c.TemporaryKeyPairName, "vpc_id": &c.VpcId, + "avail_zone": &c.AvailZone, } for n, ptr := range templates { diff --git a/builder/amazon/common/step_run_source_instance.go b/builder/amazon/common/step_run_source_instance.go index 4aeab217c..5d26f8c69 100644 --- a/builder/amazon/common/step_run_source_instance.go +++ b/builder/amazon/common/step_run_source_instance.go @@ -18,6 +18,7 @@ type StepRunSourceInstance struct { SourceAMI string IamInstanceProfile string SubnetId string + AvailZone string BlockDevices BlockDevices instance *ec2.Instance @@ -51,6 +52,7 @@ func (s *StepRunSourceInstance) Run(state multistep.StateBag) multistep.StepActi IamInstanceProfile: s.IamInstanceProfile, SubnetId: s.SubnetId, BlockDevices: s.BlockDevices.BuildLaunchDevices(), + AvailZone: s.AvailZone, } ui.Say("Launching a source AWS instance...") diff --git a/builder/amazon/ebs/builder.go b/builder/amazon/ebs/builder.go index 376a90e2b..f646d694f 100644 --- a/builder/amazon/ebs/builder.go +++ b/builder/amazon/ebs/builder.go @@ -101,6 +101,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe SourceAMI: b.config.SourceAmi, IamInstanceProfile: b.config.IamInstanceProfile, SubnetId: b.config.SubnetId, + AvailZone: b.config.AvailZone, BlockDevices: b.config.BlockDevices, }, &common.StepConnectSSH{ diff --git a/website/source/docs/builders/amazon-ebs.html.markdown b/website/source/docs/builders/amazon-ebs.html.markdown index 7248a2e2d..58d1dbcd7 100644 --- a/website/source/docs/builders/amazon-ebs.html.markdown +++ b/website/source/docs/builders/amazon-ebs.html.markdown @@ -120,6 +120,9 @@ Optional: * `vpc_id` (string) - If launching into a VPC subnet, Packer needs the VPC ID in order to create a temporary security group within the VPC. +* `avail_zone` (string) - Destination availability zone to launch instance in. + Leave this empty to allow Amazon to auto-assign.. + ## Basic Example Here is a basic example. It is completely valid except for the access keys: