@ -34,9 +34,8 @@ type Config struct {
}
type Builder struct {
config Config
runner multistep . Runner
isSpotInstance bool
config Config
runner multistep . Runner
}
func ( b * Builder ) Prepare ( raws ... interface { } ) ( [ ] string , error ) {
@ -61,7 +60,6 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, error) {
if b . config . PackerConfig . PackerForce {
b . config . AMIForceDeregister = true
}
b . isSpotInstance = b . config . SpotPrice != "" && b . config . SpotPrice != "0"
// Accumulate any errors
var errs * packer . MultiError
@ -71,8 +69,11 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, error) {
errs = packer . MultiErrorAppend ( errs , b . config . BlockDevices . Prepare ( & b . config . ctx ) ... )
errs = packer . MultiErrorAppend ( errs , b . config . RunConfig . Prepare ( & b . config . ctx ) ... )
if b . isSpotInstance && ( b . config . AMIENASupport || b . config . AMISriovNetSupport ) {
errs = packer . MultiErrorAppend ( errs , fmt . Errorf ( "Spot instances do not support modification. Please ensure you use an AMI that supports either SR-IOV or ENA." ) )
if b . config . IsSpotInstance ( ) && ( b . config . AMIENASupport || b . config . AMISriovNetSupport ) {
errs = packer . MultiErrorAppend ( errs ,
fmt . Errorf ( "Spot instances do not support modification, which is required " +
"when either `ena_support` or `sriov_support` are set. Please ensure " +
"you use an AMI that already has either SR-IOV or ENA enabled." ) )
}
if errs != nil && len ( errs . Errors ) > 0 {
@ -117,45 +118,45 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
var instanceStep multistep . Step
if b . isSpotInstance {
if b . conf ig. I sSpotInstance( ) {
instanceStep = & awscommon . StepRunSpotInstance {
Debug : b . config . PackerDebug ,
ExpectedRootDevice : "ebs" ,
SpotPrice : b . config . SpotPrice ,
SpotPriceProduct : b . config . SpotPriceAutoProduct ,
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 ,
EbsOptimized : b . config . EbsOptimized ,
AvailabilityZone : b . config . AvailabilityZone ,
BlockDevices : b . config . BlockDevices ,
Tags : b . config . RunTags ,
VolumeTags : b . config . VolumeRunTags ,
Ctx : b . config . ctx ,
AssociatePublicIpAddress : b . config . AssociatePublicIpAddress ,
AvailabilityZone : b . config . AvailabilityZone ,
BlockDevices : b . config . BlockDevices ,
Ctx : b . config . ctx ,
Debug : b . config . PackerDebug ,
EbsOptimized : b . config . EbsOptimized ,
ExpectedRootDevice : "ebs" ,
IamInstanceProfile : b . config . IamInstanceProfile ,
InstanceInitiatedShutdownBehavior : b . config . InstanceInitiatedShutdownBehavior ,
InstanceType : b . config . InstanceType ,
SourceAMI : b . config . SourceAmi ,
SpotPrice : b . config . SpotPrice ,
SpotPriceProduct : b . config . SpotPriceAutoProduct ,
SubnetId : b . config . SubnetId ,
Tags : b . config . RunTags ,
UserData : b . config . UserData ,
UserDataFile : b . config . UserDataFile ,
VolumeTags : b . config . VolumeRunTags ,
}
} else {
instanceStep = & 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 ,
AssociatePublicIpAddress : b . config . AssociatePublicIpAddress ,
EbsOptimized : b . config . EbsOptimized ,
AvailabilityZone : b . config . AvailabilityZone ,
BlockDevices : b . config . BlockDevices ,
Tags : b . config . RunTags ,
VolumeTags : b . config . VolumeRunTags ,
Ctx : b . config . ctx ,
AssociatePublicIpAddress : b . config . AssociatePublicIpAddress ,
AvailabilityZone : b . config . AvailabilityZone ,
BlockDevices : b . config . BlockDevices ,
Ctx : b . config . ctx ,
Debug : b . config . PackerDebug ,
EbsOptimized : b . config . EbsOptimized ,
ExpectedRootDevice : "ebs" ,
IamInstanceProfile : b . config . IamInstanceProfile ,
InstanceInitiatedShutdownBehavior : b . config . InstanceInitiatedShutdownBehavior ,
InstanceType : b . config . InstanceType ,
SourceAMI : b . config . SourceAmi ,
SubnetId : b . config . SubnetId ,
Tags : b . config . RunTags ,
UserData : b . config . UserData ,
UserDataFile : b . config . UserDataFile ,
VolumeTags : b . config . VolumeRunTags ,
}
}
@ -206,7 +207,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
} ,
& common . StepProvision { } ,
& awscommon . StepStopEBSBackedInstance {
Skip : b . isSpotInstance,
Skip : b . conf ig. I sSpotInstance( ) ,
DisableStopInstance : b . config . DisableStopInstance ,
} ,
& awscommon . StepModifyEBSBackedInstance {