From 48fd58107d455e52b6569fcfd739a92a8c30e66d Mon Sep 17 00:00:00 2001 From: Eric Vergnaud Date: Sat, 22 Dec 2018 16:03:15 +0000 Subject: [PATCH] Wait until instance is up when creating instance tags --- AwsClient/src/main/java/prompto/aws/EC2.java | 22 ++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/AwsClient/src/main/java/prompto/aws/EC2.java b/AwsClient/src/main/java/prompto/aws/EC2.java index ed630b79..6875eaa9 100644 --- a/AwsClient/src/main/java/prompto/aws/EC2.java +++ b/AwsClient/src/main/java/prompto/aws/EC2.java @@ -13,6 +13,7 @@ import com.amazonaws.services.ec2.AmazonEC2; import com.amazonaws.services.ec2.AmazonEC2ClientBuilder; import com.amazonaws.services.ec2.model.AllocateAddressResult; +import com.amazonaws.services.ec2.model.AmazonEC2Exception; import com.amazonaws.services.ec2.model.AssociateAddressRequest; import com.amazonaws.services.ec2.model.AssociateAddressResult; import com.amazonaws.services.ec2.model.CreateImageRequest; @@ -73,10 +74,23 @@ public String runInstance(String imageId, String instanceType, String keyName, S } public void setInstanceName(String instanceId, String name) { - CreateTagsRequest tagsRequest = new CreateTagsRequest() - .withResources(instanceId) - .withTags(new Tag("Name", name)); - ec2.createTags(tagsRequest); + // this is typically called immediately after creating an instance + // however, the instance may not exist yet, see + // so try in a loop with a sleep period + for(int i=0;i<10;i++) { + try { + CreateTagsRequest tagsRequest = new CreateTagsRequest() + .withResources(instanceId) + .withTags(new Tag("Name", name)); + ec2.createTags(tagsRequest); + return; + } catch(AmazonEC2Exception e) { + if("InvalidInstanceID.NotFound".equals(e.getErrorCode())) + unsafeSleep(500); + else + throw e; + } + } } public void startInstance(String instanceId) {