@Override protected Set<RunningInstance> createNodesInRegionAndZone(String region, String zone, String group, int count, Template template, RunInstancesOptions instanceOptions) { Float spotPrice = getSpotPriceOrNull(template.getOptions()); if (spotPrice != null) { AWSEC2TemplateOptions awsOptions = AWSEC2TemplateOptions.class.cast(template.getOptions()); LaunchSpecification spec = AWSRunInstancesOptions.class.cast(instanceOptions).getLaunchSpecificationBuilder() .imageId(template.getImage().getProviderId()).availabilityZone(zone).subnetId(awsOptions.getSubnetId()) .iamInstanceProfileArn(awsOptions.getIAMInstanceProfileArn()) .iamInstanceProfileName(awsOptions.getIAMInstanceProfileName()).build(); RequestSpotInstancesOptions options = awsOptions.getSpotOptions(); if (logger.isDebugEnabled()) logger.debug(">> requesting %d spot instances region(%s) price(%f) spec(%s) options(%s)", count, region, spotPrice, spec, options); return ImmutableSet.<RunningInstance> copyOf(transform(client.getSpotInstanceApi().get() .requestSpotInstancesInRegion(region, spotPrice, count, spec, options), spotConverter)); } return super.createNodesInRegionAndZone(region, zone, group, count, template, instanceOptions); }
@Override protected Set<RunningInstance> createNodesInRegionAndZone(String region, String zone, String group, int count, Template template, RunInstancesOptions instanceOptions) { Float spotPrice = getSpotPriceOrNull(template.getOptions()); if (spotPrice != null) { AWSEC2TemplateOptions awsOptions = AWSEC2TemplateOptions.class.cast(template.getOptions()); LaunchSpecification spec = AWSRunInstancesOptions.class.cast(instanceOptions).getLaunchSpecificationBuilder() .imageId(template.getImage().getProviderId()).availabilityZone(zone).subnetId(awsOptions.getSubnetId()) .iamInstanceProfileArn(awsOptions.getIAMInstanceProfileArn()) .iamInstanceProfileName(awsOptions.getIAMInstanceProfileName()).build(); RequestSpotInstancesOptions options = awsOptions.getSpotOptions(); if (logger.isDebugEnabled()) logger.debug(">> requesting %d spot instances region(%s) price(%f) spec(%s) options(%s)", count, region, spotPrice, spec, options); return ImmutableSet.<RunningInstance> copyOf(transform(client.getSpotInstanceApi().get() .requestSpotInstancesInRegion(region, spotPrice, count, spec, options), spotConverter)); } return super.createNodesInRegionAndZone(region, zone, group, count, template, instanceOptions); }
@Override protected Set<RunningInstance> createNodesInRegionAndZone(String region, String zone, String group, int count, Template template, RunInstancesOptions instanceOptions) { Float spotPrice = getSpotPriceOrNull(template.getOptions()); if (spotPrice != null) { AWSEC2TemplateOptions awsOptions = AWSEC2TemplateOptions.class.cast(template.getOptions()); LaunchSpecification spec = AWSRunInstancesOptions.class.cast(instanceOptions).getLaunchSpecificationBuilder() .imageId(template.getImage().getProviderId()).availabilityZone(zone).subnetId(awsOptions.getSubnetId()) .iamInstanceProfileArn(awsOptions.getIAMInstanceProfileArn()) .iamInstanceProfileName(awsOptions.getIAMInstanceProfileName()).build(); RequestSpotInstancesOptions options = awsOptions.getSpotOptions(); if (logger.isDebugEnabled()) logger.debug(">> requesting %d spot instances region(%s) price(%f) spec(%s) options(%s)", count, region, spotPrice, spec, options); return ImmutableSet.<RunningInstance> copyOf(transform(client.getSpotInstanceApi().get() .requestSpotInstancesInRegion(region, spotPrice, count, spec, options), spotConverter)); } return super.createNodesInRegionAndZone(region, zone, group, count, template, instanceOptions); }
@Test(enabled = true) public void testCreateSpotInstance() { String launchGroup = PREFIX + "1"; for (String region : Region.DEFAULT_REGIONS) for (SpotInstanceRequest request : client.getSpotInstanceApi().get().describeSpotInstanceRequestsInRegion( region)) if (launchGroup.equals(request.getLaunchGroup())) client.getSpotInstanceApi().get().cancelSpotInstanceRequestsInRegion(region, request.getId()); start = System.currentTimeMillis(); requests = client.getSpotInstanceApi().get().requestSpotInstancesInRegion( "sa-east-1", 0.09f, 1, LaunchSpecification.builder().imageId("ami-3e3be423").instanceType(InstanceType.M1_SMALL).build(), launchGroup(launchGroup).availabilityZoneGroup(launchGroup).validFrom( new Date(System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(2))).validUntil( new Date(System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(SPOT_DELAY_SECONDS)))); assertNotNull(requests); for (SpotInstanceRequest request : requests) verifySpotInstance(request); }