From 2322d3ae6bde7d91af77c137601a7492cb3ae5e4 Mon Sep 17 00:00:00 2001 From: Anthony Dong Date: Thu, 25 Jun 2020 10:48:24 +0200 Subject: [PATCH 1/2] aws: retry fetching blockdevicemapping if empty --- builder/amazon/common/step_run_spot_instance.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/builder/amazon/common/step_run_spot_instance.go b/builder/amazon/common/step_run_spot_instance.go index 0f9e65aaf..a07aad5e5 100644 --- a/builder/amazon/common/step_run_spot_instance.go +++ b/builder/amazon/common/step_run_spot_instance.go @@ -324,6 +324,9 @@ func (s *StepRunSpotInstance) Run(ctx context.Context, state multistep.StateBag) describeOutput, err = ec2conn.DescribeInstances(&ec2.DescribeInstancesInput{ InstanceIds: []*string{aws.String(instanceId)}, }) + if len(describeOutput.Reservations) > 0 && len(describeOutput.Reservations[0].Instances) > 0 && len(describeOutput.Reservations[0].Instances[0].BlockDeviceMappings) == 0 { + return fmt.Errorf("Instance has no block devices") + } return err }) if err != nil || len(describeOutput.Reservations) == 0 || len(describeOutput.Reservations[0].Instances) == 0 { From a885e620ee77494c14bb3fa4f9e65dfc865af4e2 Mon Sep 17 00:00:00 2001 From: Megan Marsh Date: Wed, 8 Jul 2020 11:55:56 -0700 Subject: [PATCH 2/2] don't error for no mappings if no mappings were set. --- builder/amazon/common/step_run_spot_instance.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/builder/amazon/common/step_run_spot_instance.go b/builder/amazon/common/step_run_spot_instance.go index a07aad5e5..acf6b0478 100644 --- a/builder/amazon/common/step_run_spot_instance.go +++ b/builder/amazon/common/step_run_spot_instance.go @@ -324,8 +324,10 @@ func (s *StepRunSpotInstance) Run(ctx context.Context, state multistep.StateBag) describeOutput, err = ec2conn.DescribeInstances(&ec2.DescribeInstancesInput{ InstanceIds: []*string{aws.String(instanceId)}, }) - if len(describeOutput.Reservations) > 0 && len(describeOutput.Reservations[0].Instances) > 0 && len(describeOutput.Reservations[0].Instances[0].BlockDeviceMappings) == 0 { - return fmt.Errorf("Instance has no block devices") + if len(describeOutput.Reservations) > 0 && len(describeOutput.Reservations[0].Instances) > 0 { + if len(s.LaunchMappings.BuildEC2BlockDeviceMappings()) > 0 && len(describeOutput.Reservations[0].Instances[0].BlockDeviceMappings) == 0 { + return fmt.Errorf("Instance has no block devices") + } } return err })