Skip to content

Commit

Permalink
Only use instance status when type is c5.x
Browse files Browse the repository at this point in the history
  • Loading branch information
mwhooker committed Jan 8, 2018
1 parent dfd5f07 commit a3de568
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 5 deletions.
25 changes: 21 additions & 4 deletions builder/amazon/common/step_run_source_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"fmt"
"io/ioutil"
"log"
"strings"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/ec2"
Expand Down Expand Up @@ -175,10 +176,7 @@ func (s *StepRunSourceInstance) Run(state multistep.StateBag) multistep.StepActi
ui.Message(fmt.Sprintf("Instance ID: %s", instanceId))
ui.Say(fmt.Sprintf("Waiting for instance (%v) to become ready...", instanceId))

describeInstanceStatus := &ec2.DescribeInstanceStatusInput{
InstanceIds: []*string{aws.String(instanceId)},
}
if err := ec2conn.WaitUntilInstanceStatusOk(describeInstanceStatus); err != nil {
if err := waitUntilInstanceReady(ec2conn, instanceId, s.InstanceType); err != nil {
err := fmt.Errorf("Error waiting for instance (%s) to become ready: %s", instanceId, err)
state.Put("error", err)
ui.Error(err.Error())
Expand Down Expand Up @@ -239,3 +237,22 @@ func (s *StepRunSourceInstance) Cleanup(state multistep.StateBag) {
}
}
}

func waitUntilInstanceReady(ec2conn *ec2.EC2, instanceID, instanceType string) error {
statusOKMap := make(map[string]struct{})
statusOKMap["c5"] = struct{}{}

if _, ok := statusOKMap[strings.Split(instanceType, ".")[0]]; ok {
log.Println("[INFO] using WaitUntilInstanceStatusOk for instance to become ready. " +
"Please make sure you have the ec2:DescribeInstanceStatus permission.")
describeInstanceStatus := &ec2.DescribeInstanceStatusInput{
InstanceIds: []*string{aws.String(instanceID)},
}
return ec2conn.WaitUntilInstanceStatusOk(describeInstanceStatus)
}
log.Println("[INFO] using WaitUntilInstanceRunning for instance to become ready.")
describeInstance := &ec2.DescribeInstancesInput{
InstanceIds: []*string{aws.String(instanceID)},
}
return ec2conn.WaitUntilInstanceRunning(describeInstance)
}
1 change: 0 additions & 1 deletion website/source/docs/builders/amazon.html.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,6 @@ Packer to work:
"ec2:DeregisterImage",
"ec2:DescribeImageAttribute",
"ec2:DescribeImages",
"ec2:DescribeInstanceStatus",
"ec2:DescribeInstances",
"ec2:DescribeRegions",
"ec2:DescribeSecurityGroups",
Expand Down

0 comments on commit a3de568

Please sign in to comment.