From 4fc764430daa8a98f3bd2e0d65b0126187a562b8 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Fri, 10 May 2013 15:47:46 -0700 Subject: [PATCH] builder/amazonebs: Wait for AMI to become ready --- builder/amazonebs/builder.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/builder/amazonebs/builder.go b/builder/amazonebs/builder.go index 10df6eb83..d20bf4781 100644 --- a/builder/amazonebs/builder.go +++ b/builder/amazonebs/builder.go @@ -17,6 +17,7 @@ import ( type config struct { AccessKey string `json:"access_key"` + AMIName string `json:"ami_name"` Region string SecretKey string `json:"secret_key"` SourceAmi string `json:"source_ami"` @@ -96,7 +97,7 @@ func (b *Builder) Run(build packer.Build, ui packer.Ui) { ui.Say("Creating the AMI...\n") createOpts := &ec2.CreateImage{ InstanceId: instance.InstanceId, - Name: "ZIMAGINE", + Name: b.config.AMIName, } createResp, err := ec2conn.CreateImage(createOpts) @@ -107,6 +108,20 @@ func (b *Builder) Run(build packer.Build, ui packer.Ui) { ui.Say("AMI: %s\n", createResp.ImageId) + // Wait for the image to become ready + ui.Say("Waiting for AMI to become ready...\n") + for { + imageResp, err := ec2conn.Images([]string{createResp.ImageId}, ec2.NewFilter()) + if err != nil { + ui.Error("%s\n", err.Error()) + return + } + + if imageResp.Images[0].State == "available" { + break + } + } + // Make sure we clean up the instance by terminating it, no matter what defer func() { // TODO: error handling