List of usage examples for com.amazonaws.services.ec2.model RunInstancesRequest withPlacement
public RunInstancesRequest withPlacement(Placement placement)
The placement for the instance.
From source file:com.cloudera.director.aws.ec2.EC2Provider.java
License:Apache License
/** * Builds a {@code RunInstancesRequest} starting from a template and a set of * virtual IDs./*from w ww.java 2s.c o m*/ * * @param template the instance template * @param virtualInstanceIds the virtual instance IDs */ @SuppressWarnings("ConstantConditions") private RunInstancesRequest newRunInstancesRequest(EC2InstanceTemplate template, Collection<String> virtualInstanceIds, int minCount) { LOG.info(">> Building instance requests"); int groupSize = virtualInstanceIds.size(); String image = template.getImage(); String type = template.getType(); InstanceNetworkInterfaceSpecification network = getInstanceNetworkInterfaceSpecification(template); List<BlockDeviceMapping> deviceMappings = getBlockDeviceMappings(template); LOG.info(">> Instance request type: {}, image: {}, group size: {}", type, image, groupSize); RunInstancesRequest request = new RunInstancesRequest().withImageId(image).withInstanceType(type) .withMaxCount(groupSize).withMinCount(minCount) .withClientToken( getHashOfVirtualInstanceIdsForClientToken(virtualInstanceIds, Optional.<Long>absent())) .withNetworkInterfaces(network).withBlockDeviceMappings(deviceMappings); if (template.getIamProfileName().isPresent()) { request.withIamInstanceProfile( new IamInstanceProfileSpecification().withName(template.getIamProfileName().get())); } if (template.getKeyName().isPresent()) { request.withKeyName(template.getKeyName().get()); } Placement placement = null; if (template.getAvailabilityZone().isPresent()) { placement = new Placement().withAvailabilityZone(template.getAvailabilityZone().get()); } if (template.getPlacementGroup().isPresent()) { placement = (placement == null) ? new Placement().withGroupName(template.getPlacementGroup().get()) : placement.withGroupName(template.getPlacementGroup().get()); } placement = (placement == null) ? new Placement().withTenancy(template.getTenancy()) : placement.withTenancy(template.getTenancy()); request.withPlacement(placement); return request; }
From source file:com.urbancode.terraform.tasks.aws.helpers.AWSHelper.java
License:Apache License
/** * Launches a single instance with given parameters. * The REQUIRED parameters are amiId;/* www .j a v a2 s . c o m*/ * You should always pass in a keyPair also, unless you know exactly what you are doing. Chances * are that you won't be able to get into your instance and it will be useless. * If groups is null, the instance will be launched with the default security group. * Subnet is only required if you're launching into a VPC. * * This will return the instanceId of the instance launched. * * @param amiId * @param subnetId * @param keyPair * @param size * @param userData * @param groups * @param ec2Client * @return instanceId */ public String launchAmi(String amiId, String subnetId, String keyPair, String size, String userData, List<String> groups, List<BlockDeviceMapping> blockMaps, String ariId, String akiId, String zone, String privateIp, AmazonEC2 ec2Client) { String instanceId = null; RunInstancesRequest request = new RunInstancesRequest().withImageId(amiId).withMinCount(1).withMaxCount(1); if (subnetId != null && !subnetId.isEmpty()) { // launch in VPC request = request.withSubnetId(subnetId); } else if (zone != null && !zone.isEmpty()) { // launch in EC2 Placement placement = new Placement().withAvailabilityZone(zone); request = request.withPlacement(placement); } else { log.error("No place to launch the instance specified." + "\nPlease specify either a subnet or region"); } if (keyPair != null) { request = request.withKeyName(keyPair); } if (size != null) { request = request.withInstanceType(size); } if (userData != null) { request = request.withUserData(Base64.encodeBase64String(userData.getBytes())); } if (groups != null && !groups.isEmpty()) { request = request.withSecurityGroupIds(groups); } if (blockMaps != null && !blockMaps.isEmpty()) { request = request.withBlockDeviceMappings(blockMaps); } if (ariId != null && !ariId.isEmpty()) { request = request.withRamdiskId(ariId); } if (akiId != null && !akiId.isEmpty()) { request = request.withKernelId(akiId); } if (privateIp != null && !privateIp.isEmpty()) { request = request.withPrivateIpAddress(privateIp); } RunInstancesResult result = ec2Client.runInstances(request); List<Instance> instances = result.getReservation().getInstances(); if (instances == null) { instanceId = null; log.error("List of instances is null!"); } else if (instances.size() == 0) { instanceId = null; log.error("List of instances is empty!"); } else if (instances.size() == 1) { instanceId = instances.get(0).getInstanceId(); log.info("Created instance with Id: " + instanceId); } else if (instances.size() > 1) { log.error("Too many instances! This is not supported!"); } return instanceId; }
From source file:com.xebialabs.overcast.host.Ec2CloudHost.java
License:Apache License
protected String runInstance() { RunInstancesRequest run = new RunInstancesRequest(amiId, 1, 1); run.withInstanceInitiatedShutdownBehavior("terminate"); if (amiInstanceType != null) { run.withInstanceType(amiInstanceType); }//from w ww .j a v a 2 s . c o m if (amiSecurityGroup != null) { run.withSecurityGroups(amiSecurityGroup); } if (amiKeyName != null) { run.withKeyName(amiKeyName); } if (amiAvailabilityZone != null) { run.withPlacement(new Placement(amiAvailabilityZone)); } RunInstancesResult result = ec2.runInstances(run); return result.getReservation().getInstances().get(0).getInstanceId(); }
From source file:com.zotoh.cloudapi.aws.EC2Instance.java
License:Open Source License
@Override public VirtualMachine launch(String ami, VirtualMachineProduct type, String zone, String name, String descOrUserData, String keypair, String vpcId, boolean monitoring, boolean asImageSandbox, String[] firewalls, Tag... tags) throws InternalException, CloudException { tstEStrArg("image-id", ami); tstObjArg("product-type", type); tstEStrArg("keypair", keypair); tstEStrArg("zone", zone); RunInstancesRequest req = new RunInstancesRequest().withInstanceType(type.getProductId()).withImageId(ami) .withKeyName(keypair).withMaxCount(1).withMinCount(1).withMonitoring(monitoring); if (!isNilArray(firewalls)) { req.withSecurityGroups(firewalls); }// w w w . ja va 2 s . co m String[] ss = zone.split("\\|"); _svc.getCloud().setAWSSite(ss[0]); if (ss.length > 1) { req.withPlacement(new Placement().withAvailabilityZone(trim(ss[1]))); } if (!isEmpty(descOrUserData)) { req.withUserData(descOrUserData); } RunInstancesResult res = _svc.getCloud().getEC2().runInstances(req); Reservation r = res == null ? null : res.getReservation(); VirtualMachine vm = null; if (r != null) { List<Instance> lst = r.getInstances(); vm = toVM(r.getOwnerId(), isNil(lst) ? null : lst.get(0)); } return vm; }
From source file:jp.primecloud.auto.process.aws.AwsInstanceProcess.java
License:Open Source License
public void run(AwsProcessClient awsProcessClient, Long instanceNo) { Instance instance = instanceDao.read(instanceNo); AwsInstance awsInstance = awsInstanceDao.read(instanceNo); ImageAws imageAws = imageAwsDao.read(instance.getImageNo()); PlatformAws platformAws = awsProcessClient.getPlatformAws(); // ?/*w w w.j a v a 2 s . c o m*/ RunInstancesRequest request = new RunInstancesRequest(); request.withMinCount(1); request.withMaxCount(1); request.withImageId(imageAws.getImageId()); request.withKernelId(StringUtils.isEmpty(imageAws.getKernelId()) ? null : imageAws.getKernelId()); request.withRamdiskId(StringUtils.isEmpty(imageAws.getRamdiskId()) ? null : imageAws.getRamdiskId()); request.withKeyName(awsInstance.getKeyName()); request.withInstanceType(awsInstance.getInstanceType()); // UserData Map<String, String> userData = createUserData(instanceNo); request.withUserData(encodeUserData(userData)); // ?VPC?? if (BooleanUtils.isNotTrue(platformAws.getVpc())) { // AvailabilityZone if (StringUtils.isNotEmpty(awsInstance.getAvailabilityZone())) { request.withPlacement(new Placement(awsInstance.getAvailabilityZone())); } // SecurityGroup if (StringUtils.isNotEmpty(awsInstance.getSecurityGroups())) { for (String groupName : StringUtils.split(awsInstance.getSecurityGroups(), ",")) { request.withSecurityGroups(groupName.trim()); } } } // VPC?? else { // Subnet request.withSubnetId(awsInstance.getSubnetId()); // SecurytiGroup List<SecurityGroup> securityGroups = awsCommonProcess.describeSecurityGroupsByVpcId(awsProcessClient, platformAws.getVpcId()); for (String groupName : StringUtils.split(awsInstance.getSecurityGroups(), ",")) { groupName = groupName.trim(); for (SecurityGroup securityGroup : securityGroups) { if (StringUtils.equals(groupName, securityGroup.getGroupName())) { request.withSecurityGroupIds(securityGroup.getGroupId()); break; } } } // PrivateIpAddress if (StringUtils.isNotEmpty(awsInstance.getPrivateIpAddress())) { request.withPrivateIpAddress(awsInstance.getPrivateIpAddress()); } } // BlockDeviceMapping List<BlockDeviceMapping> blockDeviceMappings = createBlockDeviceMappings(awsProcessClient, imageAws, awsInstance); request.withBlockDeviceMappings(blockDeviceMappings); // processLogger.debug(null, instance, "AwsInstanceCreate", new Object[] { awsProcessClient.getPlatform().getPlatformName() }); // ?? RunInstancesResult result = awsProcessClient.getEc2Client().runInstances(request); Reservation reservation = result.getReservation(); if (reservation == null || reservation.getInstances().size() != 1) { // ? throw new AutoException("EPROCESS-000105"); } com.amazonaws.services.ec2.model.Instance instance2 = reservation.getInstances().get(0); // if (log.isInfoEnabled()) { log.info(MessageUtils.getMessage("IPROCESS-100115", instance2.getInstanceId())); } // awsInstance.setInstanceId(instance2.getInstanceId()); awsInstance.setStatus(instance2.getState().getName()); awsInstanceDao.update(awsInstance); }
From source file:org.apache.usergrid.chop.api.store.amazon.EC2InstanceManager.java
License:Apache License
/** * Launches instances of given cluster./*from ww w .ja v a2 s . c o m*/ * * After launching instances, blocks for maximum <code>timeout</code> amount until all * instances get into the Running state. * * @param stack <code>ICoordinatedStack</code> object containing the <code>cluster</code> * @param cluster * @param timeout in milliseconds, if smaller than <code>getDefaultTimeout()</code> it doesn't wait * @return resulting runner instances which successfully got in Running state */ @Override public LaunchResult launchCluster(ICoordinatedStack stack, ICoordinatedCluster cluster, int timeout) { RunInstancesResult runInstancesResult = null; try { RunInstancesRequest runInstancesRequest = new RunInstancesRequest(); runInstancesRequest.withImageId(cluster.getInstanceSpec().getImageId()) .withInstanceType(cluster.getInstanceSpec().getType()).withMinCount(cluster.getSize()) .withMaxCount(cluster.getSize()).withKeyName(cluster.getInstanceSpec().getKeyName()) .withSecurityGroups(stack.getIpRuleSet().getName()); if (stack.getDataCenter() != null && !stack.getDataCenter().isEmpty()) { runInstancesRequest = runInstancesRequest.withPlacement(new Placement(stack.getDataCenter())); client.setEndpoint(AmazonUtils.getEndpoint(stack.getDataCenter())); } runInstancesResult = client.runInstances(runInstancesRequest); } catch (Exception e) { LOG.error("Error while launching cluster instances.", e); return new EC2LaunchResult(cluster.getInstanceSpec(), Collections.EMPTY_LIST); } LOG.info("Created instances, setting the names now..."); List<String> instanceIds = new ArrayList<String>(cluster.getSize()); String instanceNames = getInstanceName(stack, cluster); int i = 0; for (com.amazonaws.services.ec2.model.Instance instance : runInstancesResult.getReservation() .getInstances()) { try { instanceIds.add(i, instance.getInstanceId()); LOG.debug("Setting name of cluster instance with id: {}", instanceIds.get(i)); List<Tag> tags = new ArrayList<Tag>(); Tag t = new Tag(); t.setKey("Name"); t.setValue(instanceNames); tags.add(t); CreateTagsRequest ctr = new CreateTagsRequest(); ctr.setTags(tags); ctr.withResources(instanceIds.get(i)); client.createTags(ctr); } catch (Exception e) { LOG.warn("Error while setting names", e); } i++; } LOG.info("Names of the instances are set"); if (timeout > SLEEP_LENGTH) { LOG.info("Waiting for maximum {} msec until all instances are running", timeout); boolean stateCheck = waitUntil(instanceIds, InstanceState.Running, timeout); if (!stateCheck) { LOG.warn("Waiting for instances to get into Running state has timed out"); } } Collection<Instance> instances = toInstances(getEC2Instances(instanceIds)); return new EC2LaunchResult(cluster.getInstanceSpec(), instances); }
From source file:org.apache.usergrid.chop.api.store.amazon.EC2InstanceManager.java
License:Apache License
/** * Launches runner instances of given stack. * * Given <code>ICoordinatedStack</code> and an <code>InstanceSpec</code> * defining its runners' instance specifications, launches all runner instances. * After launching instances, blocks for maximum <code>timeout</code> amount until all * instances get into the Running state. * * @param stack/*ww w.j ava 2 s . c o m*/ * @param spec * @param timeout in milliseconds, if smaller than <code>getDefaultTimeout()</code> it doesn't wait * @return resulting runner instances which successfully got in Running state */ @Override public LaunchResult launchRunners(ICoordinatedStack stack, InstanceSpec spec, int timeout) { RunInstancesResult runInstancesResult = null; try { RunInstancesRequest runInstancesRequest = new RunInstancesRequest(); runInstancesRequest.withImageId(spec.getImageId()).withInstanceType(spec.getType()) .withMinCount(stack.getRunnerCount()).withMaxCount(stack.getRunnerCount()) .withKeyName(spec.getKeyName()).withSecurityGroups(stack.getIpRuleSet().getName()); if (stack.getDataCenter() != null && !stack.getDataCenter().isEmpty()) { runInstancesRequest = runInstancesRequest.withPlacement(new Placement(stack.getDataCenter())); client.setEndpoint(AmazonUtils.getEndpoint(stack.getDataCenter())); } runInstancesResult = client.runInstances(runInstancesRequest); } catch (Exception e) { LOG.error("Error while launching runner instances.", e); return new EC2LaunchResult(spec, Collections.EMPTY_LIST); } LOG.info("Created instances, setting the names now..."); List<String> instanceIds = new ArrayList<String>(stack.getRunnerCount()); String runnerNames = getRunnerName(stack); int i = 0; for (com.amazonaws.services.ec2.model.Instance instance : runInstancesResult.getReservation() .getInstances()) { try { instanceIds.add(i, instance.getInstanceId()); LOG.debug("Setting name of runner instance with id: {}", instanceIds.get(i)); List<Tag> tags = new ArrayList<Tag>(); Tag t = new Tag(); t.setKey("Name"); t.setValue(runnerNames); tags.add(t); CreateTagsRequest ctr = new CreateTagsRequest(); ctr.setTags(tags); ctr.withResources(instanceIds.get(i)); client.createTags(ctr); } catch (Exception e) { LOG.warn("Error while setting names", e); } i++; } LOG.info("Names of the instances are set"); if (timeout > SLEEP_LENGTH) { LOG.info("Waiting for maximum {} msec until all instances are running", timeout); boolean stateCheck = waitUntil(instanceIds, InstanceState.Running, timeout); if (!stateCheck) { LOG.warn("Waiting for instances to get into Running state has timed out"); } } Collection<Instance> instances = toInstances(getEC2Instances(instanceIds)); return new EC2LaunchResult(spec, instances); }
From source file:org.cloudifysource.esc.driver.provisioning.privateEc2.PrivateEC2CloudifyDriver.java
License:Open Source License
private Instance createEC2Instance(final PrivateEc2Template cfnTemplate, final ProvisioningContextImpl ctx, final boolean management, final String machineName, final long duration, final TimeUnit unit) throws CloudProvisioningException, TimeoutException { final InstanceProperties properties = cfnTemplate.getEC2Instance().getProperties(); final String availabilityZone = properties.getAvailabilityZone() == null ? null : properties.getAvailabilityZone().getValue(); final Placement placement = availabilityZone == null ? null : new Placement(availabilityZone); final String imageId = properties.getImageId() == null ? null : properties.getImageId().getValue(); final String instanceType = properties.getInstanceType() == null ? null : properties.getInstanceType().getValue(); final String keyName = properties.getKeyName() == null ? null : properties.getKeyName().getValue(); final String privateIpAddress = properties.getPrivateIpAddress() == null ? null : properties.getPrivateIpAddress().getValue(); final List<String> securityGroupIds = properties.getSecurityGroupIdsAsString(); final List<String> securityGroups = properties.getSecurityGroupsAsString(); S3Object s3Object = null; try {//w w w .ja va 2s . co m String userData = null; if (properties.getUserData() != null) { // Generate ENV script for the provisioned machine final StringBuilder sb = new StringBuilder(); final String script = management ? this.generateManagementCloudifyEnv(ctx) : this.generateCloudifyEnv(ctx); s3Object = this.uploadCloudDir(ctx, script, management); final String cloudFileS3 = this.amazonS3Uploader.generatePresignedURL(s3Object); ComputeTemplate template = this.getManagerComputeTemplate(); String cloudFileDir = (String) template.getRemoteDirectory(); // Remove '/' from the path if it's the last char. if (cloudFileDir.length() > 1 && cloudFileDir.endsWith("/")) { cloudFileDir = cloudFileDir.substring(0, cloudFileDir.length() - 1); } final String endOfLine = " >> /tmp/cloud.txt\n"; sb.append("#!/bin/bash\n"); sb.append("export TMP_DIRECTORY=/tmp").append(endOfLine); sb.append("export S3_ARCHIVE_FILE='" + cloudFileS3 + "'").append(endOfLine); sb.append("wget -q -O $TMP_DIRECTORY/cloudArchive.tar.gz $S3_ARCHIVE_FILE").append(endOfLine); sb.append("mkdir -p " + cloudFileDir).append(endOfLine); sb.append("tar zxvf $TMP_DIRECTORY/cloudArchive.tar.gz -C " + cloudFileDir).append(endOfLine); sb.append("rm -f $TMP_DIRECTORY/cloudArchive.tar.gz").append(endOfLine); sb.append("echo ").append(cloudFileDir).append("/").append(CLOUDIFY_ENV_SCRIPT).append(endOfLine); sb.append("chmod 755 ").append(cloudFileDir).append("/").append(CLOUDIFY_ENV_SCRIPT) .append(endOfLine); sb.append("source ").append(cloudFileDir).append("/").append(CLOUDIFY_ENV_SCRIPT).append(endOfLine); sb.append(properties.getUserData().getValue()); userData = sb.toString(); logger.fine("Instanciate ec2 with user data:\n" + userData); userData = StringUtils.newStringUtf8(Base64.encodeBase64(userData.getBytes())); } List<BlockDeviceMapping> blockDeviceMappings = null; AWSEC2Volume volumeConfig = null; if (properties.getVolumes() != null) { blockDeviceMappings = new ArrayList<BlockDeviceMapping>(properties.getVolumes().size()); for (final VolumeMapping volMapping : properties.getVolumes()) { volumeConfig = cfnTemplate.getEC2Volume(volMapping.getVolumeId().getValue()); blockDeviceMappings .add(this.createBlockDeviceMapping(volMapping.getDevice().getValue(), volumeConfig)); } } final RunInstancesRequest runInstancesRequest = new RunInstancesRequest(); runInstancesRequest.withPlacement(placement); runInstancesRequest.withImageId(imageId); runInstancesRequest.withInstanceType(instanceType); runInstancesRequest.withKeyName(keyName); runInstancesRequest.withPrivateIpAddress(privateIpAddress); runInstancesRequest.withSecurityGroupIds(securityGroupIds); runInstancesRequest.withSecurityGroups(securityGroups); runInstancesRequest.withMinCount(1); runInstancesRequest.withMaxCount(1); runInstancesRequest.withBlockDeviceMappings(blockDeviceMappings); runInstancesRequest.withUserData(userData); if (logger.isLoggable(Level.FINEST)) { logger.finest("EC2::Instance request=" + runInstancesRequest); } final RunInstancesResult runInstances = this.ec2.runInstances(runInstancesRequest); if (runInstances.getReservation().getInstances().size() != 1) { throw new CloudProvisioningException( "Request runInstace fails (request=" + runInstancesRequest + ")."); } Instance ec2Instance = runInstances.getReservation().getInstances().get(0); ec2Instance = this.waitRunningInstance(ec2Instance, duration, unit); this.tagEC2Instance(ec2Instance, machineName, cfnTemplate.getEC2Instance()); this.tagEC2Volumes(ec2Instance.getInstanceId(), cfnTemplate); this.waitRunningAgent(ec2Instance.getPublicIpAddress(), duration, unit); return ec2Instance; } finally { if (s3Object != null) { this.amazonS3Uploader.deleteS3Object(s3Object.getBucketName(), s3Object.getKey()); } } }
From source file:org.excalibur.service.aws.ec2.EC2.java
License:Open Source License
@Override public Instances createInstances(final InstanceTemplate template, final boolean waitForRunningState) { LoginCredentials credentials = template.getLoginCredentials(); KeyPair keyPair = getKeyPair(checkNotNull(credentials.getCredentialName())); checkState(keyPair != null || (!isNullOrEmpty(credentials.getPublicKey()))); if (keyPair == null) { String material = decrypt(credentials.getPublicKey()); keyPair = new KeyPair().setKeyName(credentials.getCredentialName()).setKeyMaterial(material); keyPair.setKeyFingerprint(importKeyPair(keyPair)).setKeyMaterial(null); }//from w w w . ja v a 2s . co m checkState(keyPair != null); createSecurityGroupIfDoesNotExist(defaultUserGroupName_); final Image image = getImageById(template.getImageId()); checkNotNull(image, String.format("Image %s does not exist", template.getImageId())); StringBuilder sb = new StringBuilder(); sb.append("#start-data\n").append("#").append(credentials.getPrivateKey()); if (!isNullOrEmpty(credentials.getPublicKey())) { sb.append("\n#").append(credentials.getPublicKey()); } sb.append("\n#end-data"); String userData = Strings2.nullAsEmpty(template.getUserData()) .concat(new String(Base64.encodeBase64(sb.toString().getBytes()))); RunInstancesRequest runInstacesRequest = new RunInstancesRequest() .withInstanceType(template.getInstanceType().getName()).withImageId(template.getImageId()) .withMinCount(template.getMinCount()).withMaxCount(template.getMaxCount()) .withKeyName(keyPair.getKeyName()).withSecurityGroups(defaultUserGroupName_).withUserData(userData); Zone zone = null; final Placement placement = new Placement(); if (template.getGroup() != null && !isNullOrEmpty(template.getGroup().getZone())) { zone = this.getZoneByName(template.getGroup().getZone()); checkState(zone != null, String.format("Invalid zone name [%s] on region [%s]", template.getGroup().getZone(), credentials_.getRegion().getName())); placement.withAvailabilityZone(zone.getName()); if (!isNullOrEmpty(template.getGroup().getGroupName())) { placement.withGroupName(template.getGroup().getGroupName()); this.createPlacementGroupsIfDoNotExist(template.getGroup()); } } if (zone == null) { zone = Lists2.first(listAvailableZonesOfRegion(this.credentials_.getRegion())); placement.withAvailabilityZone(zone.getName()); } checkNotNull(zone); checkState(!isNullOrEmpty(placement.getAvailabilityZone())); runInstacesRequest.withPlacement(placement); BlockDeviceMapping blockDeviceMapping = image.getBlockDeviceMappings().get(0); Integer diskSize = template.getDiskSize() == null ? SystemUtils2.getIntegerProperty("org.excalibur.amazon.default.disk.size", 30) : template.getDiskSize(); EbsBlockDevice disk = new EbsBlockDevice().withSnapshotId(blockDeviceMapping.getEbs().getSnapshotId()) .withVolumeSize(diskSize).withVolumeType("gp2"); runInstacesRequest.withBlockDeviceMappings( new BlockDeviceMapping().withDeviceName(image.getRootDeviceName()).withEbs(disk)); RunInstancesResult result = ec2_.runInstances(runInstacesRequest); template.setStatus(new InstanceTemplateStatus().setStatus(Status.SUCCESS)); Iterable<Instance> ec2Instances = waitForRunningState ? waitForRunningInstacesState(result.getReservation().getInstances()) : describeEC2Instances(result.getReservation().getInstances()); CreateTagsRequest tagsRequest = new CreateTagsRequest(); String instanceName = isNullOrEmpty(template.getInstanceName()) ? UUID.randomUUID().toString() : template.getInstanceName(); tagsRequest.withTags(new Tag().withKey(DEFAULT_INSTANCE_NAME_TAG).withValue(instanceName)); tagsRequest.withTags( new Tag().withKey(DEFAULT_PLATFORM_INSTANCE_USERNAME_TAG).withValue(DEFAULT_PLATFORM_USER_NAME)); tagsRequest.withTags(new Tag().withKey("keyname").withValue(keyPair.getKeyName())); tagsRequest.withResources(Collections2.transform(newArrayList(ec2Instances), INSTANCE_STRING_FUNCTION)); for (org.excalibur.core.cloud.api.domain.Tag tag : template.getTags()) { if (!isNullOrEmpty(tag.getName()) && !isNullOrEmpty(tag.getValue())) { tagsRequest.withTags(new Tag().withKey(tag.getName()).withValue(tag.getValue())); } } ec2_.createTags(tagsRequest); if (template.getMaxCount() > 1) { for (int i = 0; i < result.getReservation().getInstances().size(); i++) { CreateTagsRequest request = new CreateTagsRequest(); request.withResources(result.getReservation().getInstances().get(i).getInstanceId()) .withTags(new Tag().withKey(DEFAULT_INSTANCE_NAME_TAG) .withValue(String.format("%s-%s", instanceName, i + 1))); ec2_.createTags(request); } } // return new Instances(toExcaliburInstances(ec2Instances, keyPair)); Instances instances = this.describeInstances(ec2Instances); // LOG.debug("Waiting instances' ready state...."); ThreadUtils.sleep(30 * 1000); LOG.debug("Created [{}] instance(s) from [{}/{}]", instances.size(), template.getMinCount(), template.getMaxCount()); return instances; }