From 31bf1f342c18a83b5c02a4ac5039e39628548211 Mon Sep 17 00:00:00 2001 From: Nathan Sullivan Date: Tue, 26 Nov 2013 11:32:08 +1000 Subject: [PATCH] https://github.com/mitchellh/packer/issues/578 --- builder/amazon/common/run_config.go | 48 ++++++++++--------- .../amazon/common/step_run_source_instance.go | 44 +++++++++-------- builder/amazon/ebs/builder.go | 21 ++++---- builder/amazon/instance/builder.go | 21 ++++---- 4 files changed, 70 insertions(+), 64 deletions(-) diff --git a/builder/amazon/common/run_config.go b/builder/amazon/common/run_config.go index 208266518..74ce76cb1 100644 --- a/builder/amazon/common/run_config.go +++ b/builder/amazon/common/run_config.go @@ -11,20 +11,21 @@ import ( // RunConfig contains configuration for running an instance from a source // AMI and details on how to access that launched image. type RunConfig struct { - SourceAmi string `mapstructure:"source_ami"` - IamInstanceProfile string `mapstructure:"iam_instance_profile"` - InstanceType string `mapstructure:"instance_type"` - UserData string `mapstructure:"user_data"` - UserDataFile string `mapstructure:"user_data_file"` - RawSSHTimeout string `mapstructure:"ssh_timeout"` - SSHUsername string `mapstructure:"ssh_username"` - SSHPort int `mapstructure:"ssh_port"` - SecurityGroupId string `mapstructure:"security_group_id"` - SecurityGroupIds []string `mapstructure:"security_group_ids"` - SubnetId string `mapstructure:"subnet_id"` - TemporaryKeyPairName string `mapstructure:"temporary_key_pair_name"` - VpcId string `mapstructure:"vpc_id"` - AvailabilityZone string `mapstructure:"availability_zone"` + SourceAmi string `mapstructure:"source_ami"` + IamInstanceProfile string `mapstructure:"iam_instance_profile"` + InstanceType string `mapstructure:"instance_type"` + UserData string `mapstructure:"user_data"` + UserDataFile string `mapstructure:"user_data_file"` + RawSSHTimeout string `mapstructure:"ssh_timeout"` + SSHUsername string `mapstructure:"ssh_username"` + SSHPort int `mapstructure:"ssh_port"` + SecurityGroupId string `mapstructure:"security_group_id"` + SecurityGroupIds []string `mapstructure:"security_group_ids"` + SubnetId string `mapstructure:"subnet_id"` + AssociatePublicIpAddress bool `mapstructure:"associate_public_ip_address"` + TemporaryKeyPairName string `mapstructure:"temporary_key_pair_name"` + VpcId string `mapstructure:"vpc_id"` + AvailabilityZone string `mapstructure:"availability_zone"` // Unexported fields that are calculated from others sshTimeout time.Duration @@ -85,15 +86,16 @@ func (c *RunConfig) Prepare(t *packer.ConfigTemplate) []error { } templates := map[string]*string{ - "iam_instance_profile": &c.IamInstanceProfile, - "instance_type": &c.InstanceType, - "ssh_timeout": &c.RawSSHTimeout, - "ssh_username": &c.SSHUsername, - "source_ami": &c.SourceAmi, - "subnet_id": &c.SubnetId, - "temporary_key_pair_name": &c.TemporaryKeyPairName, - "vpc_id": &c.VpcId, - "availability_zone": &c.AvailabilityZone, + "iam_instance_profile": &cc.IamInstanceProfile, + "instance_type": &cc.InstanceType, + "ssh_timeout": &cc.RawSSHTimeout, + "ssh_username": &cc.SSHUsername, + "source_ami": &cc.SourceAmi, + "subnet_id": &cc.SubnetId, + "associate_public_ip_address": &cc.AssociatePublicIpAddress, + "temporary_key_pair_name": &cc.TemporaryKeyPairName, + "vpc_id": &cc.VpcId, + "availability_zone": &cc.AvailabilityZone, } 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 9d92c226c..a122318c4 100644 --- a/builder/amazon/common/step_run_source_instance.go +++ b/builder/amazon/common/step_run_source_instance.go @@ -10,16 +10,17 @@ import ( ) type StepRunSourceInstance struct { - Debug bool - ExpectedRootDevice string - InstanceType string - UserData string - UserDataFile string - SourceAMI string - IamInstanceProfile string - SubnetId string - AvailabilityZone string - BlockDevices BlockDevices + Debug bool + ExpectedRootDevice string + InstanceType string + UserData string + UserDataFile string + SourceAMI string + IamInstanceProfile string + SubnetId string + AssociatePublicIpAddress bool + AvailabilityZone string + BlockDevices BlockDevices instance *ec2.Instance } @@ -47,17 +48,18 @@ func (s *StepRunSourceInstance) Run(state multistep.StateBag) multistep.StepActi } runOpts := &ec2.RunInstances{ - KeyName: keyName, - ImageId: s.SourceAMI, - InstanceType: s.InstanceType, - UserData: []byte(userData), - MinCount: 0, - MaxCount: 0, - SecurityGroups: securityGroups, - IamInstanceProfile: s.IamInstanceProfile, - SubnetId: s.SubnetId, - BlockDevices: s.BlockDevices.BuildLaunchDevices(), - AvailZone: s.AvailabilityZone, + KeyName: keyName, + ImageId: s.SourceAMI, + InstanceType: s.InstanceType, + UserData: []byte(userData), + MinCount: 0, + MaxCount: 0, + SecurityGroups: securityGroups, + IamInstanceProfile: s.IamInstanceProfile, + SubnetId: s.SubnetId, + AssociatePublicIpAddress: s.AssociatePublicIpAddress, + BlockDevices: s.BlockDevices.BuildLaunchDevices(), + AvailZone: s.AvailabilityZone, } ui.Say("Launching a source AWS instance...") diff --git a/builder/amazon/ebs/builder.go b/builder/amazon/ebs/builder.go index 5d68f9470..e58392f84 100644 --- a/builder/amazon/ebs/builder.go +++ b/builder/amazon/ebs/builder.go @@ -93,16 +93,17 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe VpcId: b.config.VpcId, }, &awscommon.StepRunSourceInstance{ - Debug: b.config.PackerDebug, - ExpectedRootDevice: "ebs", - InstanceType: b.config.InstanceType, - UserData: b.config.UserData, - UserDataFile: b.config.UserDataFile, - SourceAMI: b.config.SourceAmi, - IamInstanceProfile: b.config.IamInstanceProfile, - SubnetId: b.config.SubnetId, - AvailabilityZone: b.config.AvailabilityZone, - BlockDevices: b.config.BlockDevices, + Debug: b.config.PackerDebug, + ExpectedRootDevice: "ebs", + InstanceType: b.config.InstanceType, + UserData: b.config.UserData, + UserDataFile: b.config.UserDataFile, + SourceAMI: b.config.SourceAmi, + IamInstanceProfile: b.config.IamInstanceProfile, + SubnetId: b.config.SubnetId, + AssociatePublicIpAddress: b.config.AssociatePublicIpAddress, + AvailabilityZone: b.config.AvailabilityZone, + BlockDevices: b.config.BlockDevices, }, &common.StepConnectSSH{ SSHAddress: awscommon.SSHAddress(ec2conn, b.config.SSHPort), diff --git a/builder/amazon/instance/builder.go b/builder/amazon/instance/builder.go index 455a7cd01..bb655e629 100644 --- a/builder/amazon/instance/builder.go +++ b/builder/amazon/instance/builder.go @@ -196,16 +196,17 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe VpcId: b.config.VpcId, }, &awscommon.StepRunSourceInstance{ - Debug: b.config.PackerDebug, - ExpectedRootDevice: "instance-store", - InstanceType: b.config.InstanceType, - IamInstanceProfile: b.config.IamInstanceProfile, - UserData: b.config.UserData, - UserDataFile: b.config.UserDataFile, - SourceAMI: b.config.SourceAmi, - SubnetId: b.config.SubnetId, - AvailabilityZone: b.config.AvailabilityZone, - BlockDevices: b.config.BlockDevices, + Debug: b.config.PackerDebug, + ExpectedRootDevice: "instance-store", + InstanceType: b.config.InstanceType, + IamInstanceProfile: b.config.IamInstanceProfile, + UserData: b.config.UserData, + UserDataFile: b.config.UserDataFile, + SourceAMI: b.config.SourceAmi, + SubnetId: b.config.SubnetId, + AssociatePublicIpAddress: b.config.AssociatePublicIpAddress, + AvailabilityZone: b.config.AvailabilityZone, + BlockDevices: b.config.BlockDevices, }, &common.StepConnectSSH{ SSHAddress: awscommon.SSHAddress(ec2conn, b.config.SSHPort),