Fix issue 4875 - use retry logic when creating instance tags

This commit is contained in:
luis-silva 2017-05-11 16:12:27 +01:00
parent bad36dfc2d
commit a269bbc6fa
1 changed files with 18 additions and 3 deletions

View File

@ -9,8 +9,10 @@ import (
"time" "time"
"github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/service/ec2" "github.com/aws/aws-sdk-go/service/ec2"
retry "github.com/hashicorp/packer/common"
"github.com/hashicorp/packer/packer" "github.com/hashicorp/packer/packer"
"github.com/hashicorp/packer/template/interpolate" "github.com/hashicorp/packer/template/interpolate"
"github.com/mitchellh/multistep" "github.com/mitchellh/multistep"
@ -291,10 +293,23 @@ func (s *StepRunSourceInstance) Run(state multistep.StateBag) multistep.StepActi
ReportTags(ui, ec2Tags) ReportTags(ui, ec2Tags)
_, err = ec2conn.CreateTags(&ec2.CreateTagsInput{ // Retry creating tags for about 2.5 minutes
Tags: ec2Tags, err = retry.Retry(0.2, 30, 11, func() (bool, error) {
Resources: []*string{instance.InstanceId}, _, err := ec2conn.CreateTags(&ec2.CreateTagsInput{
Tags: ec2Tags,
Resources: []*string{instance.InstanceId},
})
if err == nil {
return true, nil
}
if awsErr, ok := err.(awserr.Error); ok {
if awsErr.Code() == "InvalidInstanceID.NotFound" {
return false, nil
}
}
return true, err
}) })
if err != nil { if err != nil {
err := fmt.Errorf("Error tagging source instance: %s", err) err := fmt.Errorf("Error tagging source instance: %s", err)
state.Put("error", err) state.Put("error", err)