Merge branch 'fix_amazon_instance_waits' of https://github.com/renat-sabitov/packer into renat-sabitov-fix_amazon_instance_waits
This commit is contained in:
commit
8e1db0d94c
|
@ -67,10 +67,10 @@ func AMIStateRefreshFunc(conn *ec2.EC2, imageId string) StateRefreshFunc {
|
||||||
|
|
||||||
// InstanceStateRefreshFunc returns a StateRefreshFunc that is used to watch
|
// InstanceStateRefreshFunc returns a StateRefreshFunc that is used to watch
|
||||||
// an EC2 instance.
|
// an EC2 instance.
|
||||||
func InstanceStateRefreshFunc(conn *ec2.EC2, i *ec2.Instance) StateRefreshFunc {
|
func InstanceStateRefreshFunc(conn *ec2.EC2, instanceId string) StateRefreshFunc {
|
||||||
return func() (interface{}, string, error) {
|
return func() (interface{}, string, error) {
|
||||||
resp, err := conn.DescribeInstances(&ec2.DescribeInstancesInput{
|
resp, err := conn.DescribeInstances(&ec2.DescribeInstancesInput{
|
||||||
InstanceIDs: []*string{i.InstanceID},
|
InstanceIDs: []*string{&instanceId},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if ec2err, ok := err.(awserr.Error); ok && ec2err.Code() == "InvalidInstanceID.NotFound" {
|
if ec2err, ok := err.(awserr.Error); ok && ec2err.Code() == "InvalidInstanceID.NotFound" {
|
||||||
|
|
|
@ -223,31 +223,12 @@ func (s *StepRunSourceInstance) Run(state multistep.StateBag) multistep.StepActi
|
||||||
instanceId = *spotResp.SpotInstanceRequests[0].InstanceID
|
instanceId = *spotResp.SpotInstanceRequests[0].InstanceID
|
||||||
}
|
}
|
||||||
|
|
||||||
instanceResp, err := ec2conn.DescribeInstances(&ec2.DescribeInstancesInput{
|
ui.Message(fmt.Sprintf("Instance ID: %s", instanceId))
|
||||||
InstanceIDs: []*string{&instanceId}})
|
ui.Say(fmt.Sprintf("Waiting for instance (%v) to become ready...", instanceId))
|
||||||
for i := 0; i < 10; i++ {
|
|
||||||
if err == nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
time.Sleep(3 * time.Second)
|
|
||||||
instanceResp, err = ec2conn.DescribeInstances(&ec2.DescribeInstancesInput{
|
|
||||||
InstanceIDs: []*string{&instanceId}})
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
err := fmt.Errorf("Error finding source instance (%s): %s", instanceId, err)
|
|
||||||
state.Put("error", err)
|
|
||||||
ui.Error(err.Error())
|
|
||||||
return multistep.ActionHalt
|
|
||||||
}
|
|
||||||
s.instance = instanceResp.Reservations[0].Instances[0]
|
|
||||||
ui.Message(fmt.Sprintf("Instance ID: %s", *s.instance.InstanceID))
|
|
||||||
|
|
||||||
ui.Say(fmt.Sprintf("Waiting for instance (%s) to become ready...", *s.instance.InstanceID))
|
|
||||||
stateChange := StateChangeConf{
|
stateChange := StateChangeConf{
|
||||||
Pending: []string{"pending"},
|
Pending: []string{"pending"},
|
||||||
Target: "running",
|
Target: "running",
|
||||||
Refresh: InstanceStateRefreshFunc(ec2conn, s.instance),
|
Refresh: InstanceStateRefreshFunc(ec2conn, instanceId),
|
||||||
StepState: state,
|
StepState: state,
|
||||||
}
|
}
|
||||||
latestInstance, err := WaitForState(&stateChange)
|
latestInstance, err := WaitForState(&stateChange)
|
||||||
|
@ -329,7 +310,7 @@ func (s *StepRunSourceInstance) Cleanup(state multistep.StateBag) {
|
||||||
}
|
}
|
||||||
stateChange := StateChangeConf{
|
stateChange := StateChangeConf{
|
||||||
Pending: []string{"pending", "running", "shutting-down", "stopped", "stopping"},
|
Pending: []string{"pending", "running", "shutting-down", "stopped", "stopping"},
|
||||||
Refresh: InstanceStateRefreshFunc(ec2conn, s.instance),
|
Refresh: InstanceStateRefreshFunc(ec2conn, s.instance.InstanceId),
|
||||||
Target: "terminated",
|
Target: "terminated",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ func (s *stepStopInstance) Run(state multistep.StateBag) multistep.StepAction {
|
||||||
stateChange := awscommon.StateChangeConf{
|
stateChange := awscommon.StateChangeConf{
|
||||||
Pending: []string{"running", "stopping"},
|
Pending: []string{"running", "stopping"},
|
||||||
Target: "stopped",
|
Target: "stopped",
|
||||||
Refresh: awscommon.InstanceStateRefreshFunc(ec2conn, instance),
|
Refresh: awscommon.InstanceStateRefreshFunc(ec2conn, instance.InstanceId),
|
||||||
StepState: state,
|
StepState: state,
|
||||||
}
|
}
|
||||||
_, err = awscommon.WaitForState(&stateChange)
|
_, err = awscommon.WaitForState(&stateChange)
|
||||||
|
|
Loading…
Reference in New Issue