indicate virtualization type for all ec2 instance types

This commit is contained in:
Alex Heneveld 2015-04-22 10:25:03 +01:00 committed by Ignasi Barrera
parent a38ee21207
commit 04a4095ca6
1 changed files with 173 additions and 65 deletions

View File

@ -29,7 +29,6 @@ import java.util.Map;
import org.jclouds.compute.domain.Hardware; import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.HardwareBuilder; import org.jclouds.compute.domain.HardwareBuilder;
import org.jclouds.compute.domain.Image; import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.OsFamily;
import org.jclouds.compute.domain.Processor; import org.jclouds.compute.domain.Processor;
import org.jclouds.compute.domain.Volume; import org.jclouds.compute.domain.Volume;
import org.jclouds.compute.domain.VolumeBuilder; import org.jclouds.compute.domain.VolumeBuilder;
@ -39,22 +38,33 @@ import org.jclouds.ec2.domain.InstanceType;
import org.jclouds.ec2.domain.RootDeviceType; import org.jclouds.ec2.domain.RootDeviceType;
import org.jclouds.ec2.domain.VirtualizationType; import org.jclouds.ec2.domain.VirtualizationType;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder; import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
/** /**
* *
* @see <a href= * @see <a href=
* "http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?instance-types.html" * "http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?instance-types.html"
* /> * />
*
* and <a href=
* "http://aws.amazon.com/amazon-linux-ami/instance-type-matrix/"
* />.
*
* Also note Windows only supports HVM, as per
* <a href=
* "http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html"
* />.
* On Windows you may have to constrain hardware appropriately.
*/ */
public class EC2HardwareBuilder extends HardwareBuilder { public class EC2HardwareBuilder extends HardwareBuilder {
private Predicate<Image> rootDeviceType = any(); private Predicate<Image> rootDeviceType = any();
private Predicate<Image> virtualizationType = Predicates.or(new IsWindows(), new RequiresVirtualizationType( private Predicate<Image> virtualizationType = null;
VirtualizationType.PARAVIRTUAL));
private Predicate<Image> imageIds = any(); private Predicate<Image> imageIds = any();
private Predicate<Image> is64Bit = any(); private Predicate<Image> is64Bit = any();
@ -89,20 +99,6 @@ public class EC2HardwareBuilder extends HardwareBuilder {
} }
public static class IsWindows implements Predicate<Image> {
@Override
public boolean apply(Image image) {
return image.getOperatingSystem() != null && OsFamily.WINDOWS == image.getOperatingSystem().getFamily();
}
@Override
public String toString() {
return "isWindows()";
}
}
/** /**
* evaluates true if the Image requires the following virtualizationType * evaluates true if the Image requires the following virtualizationType
* *
@ -139,6 +135,20 @@ public class EC2HardwareBuilder extends HardwareBuilder {
return this; return this;
} }
public EC2HardwareBuilder virtualizationTypes(VirtualizationType ...virtualizationTypes) {
Preconditions.checkArgument(virtualizationTypes.length > 0, "At least one virtualization type is required.");
if (virtualizationTypes.length == 1) {
this.virtualizationType = new RequiresVirtualizationType(virtualizationTypes[0]);
} else {
List<RequiresVirtualizationType> supportedVirtualizationTypes = Lists.newArrayList();
for (VirtualizationType virtualizationType : virtualizationTypes) {
supportedVirtualizationTypes.add(new RequiresVirtualizationType(virtualizationType));
}
this.virtualizationType = Predicates.or(supportedVirtualizationTypes);
}
return this;
}
public EC2HardwareBuilder rootDeviceType(RootDeviceType rootDeviceType) { public EC2HardwareBuilder rootDeviceType(RootDeviceType rootDeviceType) {
this.rootDeviceType = new RequiresRootDeviceType(rootDeviceType); this.rootDeviceType = new RequiresRootDeviceType(rootDeviceType);
return this; return this;
@ -203,11 +213,104 @@ public class EC2HardwareBuilder extends HardwareBuilder {
return EC2HardwareBuilder.class.cast(super.userMetadata(userMetadata)); return EC2HardwareBuilder.class.cast(super.userMetadata(userMetadata));
} }
private EC2HardwareBuilder t2() {
virtualizationTypes(VirtualizationType.HVM);
return this;
}
private EC2HardwareBuilder m3() {
virtualizationTypes(VirtualizationType.HVM, VirtualizationType.PARAVIRTUAL);
return this;
}
private EC2HardwareBuilder c3() {
virtualizationTypes(VirtualizationType.HVM, VirtualizationType.PARAVIRTUAL);
return this;
}
private EC2HardwareBuilder c4() {
virtualizationTypes(VirtualizationType.HVM, VirtualizationType.PARAVIRTUAL);
return this;
}
// TODO include D2 (dense) types?
@SuppressWarnings("unused")
private EC2HardwareBuilder d2() {
virtualizationTypes(VirtualizationType.HVM);
return this;
}
private EC2HardwareBuilder r3() {
virtualizationTypes(VirtualizationType.HVM);
return this;
}
private EC2HardwareBuilder g2() {
virtualizationTypes(VirtualizationType.HVM);
return this;
}
private EC2HardwareBuilder i2() {
virtualizationTypes(VirtualizationType.HVM);
return this;
}
private EC2HardwareBuilder hs1() {
virtualizationTypes(VirtualizationType.HVM, VirtualizationType.PARAVIRTUAL);
return this;
}
// TODO below this line are previous generation, discouraged
// http://aws.amazon.com/ec2/previous-generation/
private EC2HardwareBuilder m1() {
virtualizationTypes(VirtualizationType.PARAVIRTUAL);
return this;
}
private EC2HardwareBuilder c1() {
virtualizationTypes(VirtualizationType.PARAVIRTUAL);
return this;
}
private EC2HardwareBuilder cc2() {
virtualizationTypes(VirtualizationType.HVM);
return this;
}
private EC2HardwareBuilder m2() {
virtualizationTypes(VirtualizationType.PARAVIRTUAL);
return this;
}
// cr1 never included in jclouds, so skipped here
private EC2HardwareBuilder hi1() {
virtualizationTypes(VirtualizationType.HVM, VirtualizationType.PARAVIRTUAL);
return this;
}
private EC2HardwareBuilder t1() {
virtualizationTypes(VirtualizationType.PARAVIRTUAL);
return this;
}
private EC2HardwareBuilder cg1() {
virtualizationTypes(VirtualizationType.HVM);
return this;
}
private EC2HardwareBuilder cc1() {
// often no longer available - not adding capacity (use cc2)
virtualizationTypes(VirtualizationType.HVM);
return this;
}
/** /**
* @see InstanceType#M1_SMALL * @see InstanceType#M1_SMALL
*/ */
public static EC2HardwareBuilder m1_small() { public static EC2HardwareBuilder m1_small() {
return new EC2HardwareBuilder(InstanceType.M1_SMALL) return new EC2HardwareBuilder(InstanceType.M1_SMALL).m1()
.ram(1740) .ram(1740)
.processors(ImmutableList.of(new Processor(1.0, 1.0))) .processors(ImmutableList.of(new Processor(1.0, 1.0)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -219,7 +322,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#M1_MEDIUM * @see InstanceType#M1_MEDIUM
*/ */
public static EC2HardwareBuilder m1_medium() { public static EC2HardwareBuilder m1_medium() {
return new EC2HardwareBuilder(InstanceType.M1_MEDIUM) return new EC2HardwareBuilder(InstanceType.M1_MEDIUM).m1()
.ram(3750) .ram(3750)
.processors(ImmutableList.of(new Processor(1.0, 2.0))) .processors(ImmutableList.of(new Processor(1.0, 2.0)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -233,7 +336,8 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#T1_MICRO * @see InstanceType#T1_MICRO
*/ */
public static EC2HardwareBuilder t1_micro() { public static EC2HardwareBuilder t1_micro() {
return new EC2HardwareBuilder(InstanceType.T1_MICRO).ram(630) return new EC2HardwareBuilder(InstanceType.T1_MICRO).t1()
.ram(630)
.processors(ImmutableList.of(new Processor(1.0, 1.0))).rootDeviceType(RootDeviceType.EBS); .processors(ImmutableList.of(new Processor(1.0, 1.0))).rootDeviceType(RootDeviceType.EBS);
} }
@ -241,7 +345,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#T2_MICRO * @see InstanceType#T2_MICRO
*/ */
public static EC2HardwareBuilder t2_micro() { public static EC2HardwareBuilder t2_micro() {
return new EC2HardwareBuilder(InstanceType.T2_MICRO) return new EC2HardwareBuilder(InstanceType.T2_MICRO).t2()
.ram(1024) .ram(1024)
.processors(ImmutableList.of(new Processor(1.0, 0.1))).rootDeviceType(RootDeviceType.EBS); .processors(ImmutableList.of(new Processor(1.0, 0.1))).rootDeviceType(RootDeviceType.EBS);
} }
@ -250,7 +354,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#T2_SMALL * @see InstanceType#T2_SMALL
*/ */
public static EC2HardwareBuilder t2_small() { public static EC2HardwareBuilder t2_small() {
return new EC2HardwareBuilder(InstanceType.T2_SMALL) return new EC2HardwareBuilder(InstanceType.T2_SMALL).t2()
.ram(2048) .ram(2048)
.processors(ImmutableList.of(new Processor(1.0, 0.2))).rootDeviceType(RootDeviceType.EBS); .processors(ImmutableList.of(new Processor(1.0, 0.2))).rootDeviceType(RootDeviceType.EBS);
} }
@ -259,7 +363,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#T2_MEDIUM * @see InstanceType#T2_MEDIUM
*/ */
public static EC2HardwareBuilder t2_medium() { public static EC2HardwareBuilder t2_medium() {
return new EC2HardwareBuilder(InstanceType.T2_MEDIUM) return new EC2HardwareBuilder(InstanceType.T2_MEDIUM).t2()
.ram(4096) .ram(4096)
.processors(ImmutableList.of(new Processor(1.0, 0.4))).rootDeviceType(RootDeviceType.EBS); .processors(ImmutableList.of(new Processor(1.0, 0.4))).rootDeviceType(RootDeviceType.EBS);
} }
@ -277,7 +381,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#M1_LARGE * @see InstanceType#M1_LARGE
*/ */
public static EC2HardwareBuilder m1_large() { public static EC2HardwareBuilder m1_large() {
return new EC2HardwareBuilder(InstanceType.M1_LARGE) return new EC2HardwareBuilder(InstanceType.M1_LARGE).m1()
.ram(7680) .ram(7680)
.processors(ImmutableList.of(new Processor(2.0, 2.0))) .processors(ImmutableList.of(new Processor(2.0, 2.0)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -291,7 +395,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#M1_XLARGE * @see InstanceType#M1_XLARGE
*/ */
public static EC2HardwareBuilder m1_xlarge() { public static EC2HardwareBuilder m1_xlarge() {
return new EC2HardwareBuilder(InstanceType.M1_XLARGE) return new EC2HardwareBuilder(InstanceType.M1_XLARGE).m1()
.ram(15360) .ram(15360)
.processors(ImmutableList.of(new Processor(4.0, 2.0))) .processors(ImmutableList.of(new Processor(4.0, 2.0)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -307,7 +411,8 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#M2_XLARGE * @see InstanceType#M2_XLARGE
*/ */
public static EC2HardwareBuilder m2_xlarge() { public static EC2HardwareBuilder m2_xlarge() {
return new EC2HardwareBuilder(InstanceType.M2_XLARGE).ram(17510) return new EC2HardwareBuilder(InstanceType.M2_XLARGE).m2()
.ram(17510)
.processors(ImmutableList.of(new Processor(2.0, 3.25))) .processors(ImmutableList.of(new Processor(2.0, 3.25)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
new VolumeBuilder().type(LOCAL).size(420.0f).device("/dev/sda1").bootDevice(true).durable(false).build())) new VolumeBuilder().type(LOCAL).size(420.0f).device("/dev/sda1").bootDevice(true).durable(false).build()))
@ -318,7 +423,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#M2_2XLARGE * @see InstanceType#M2_2XLARGE
*/ */
public static EC2HardwareBuilder m2_2xlarge() { public static EC2HardwareBuilder m2_2xlarge() {
return new EC2HardwareBuilder(InstanceType.M2_2XLARGE) return new EC2HardwareBuilder(InstanceType.M2_2XLARGE).m2()
.ram(35020) .ram(35020)
.processors(ImmutableList.of(new Processor(4.0, 3.25))) .processors(ImmutableList.of(new Processor(4.0, 3.25)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -331,7 +436,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#M2_4XLARGE * @see InstanceType#M2_4XLARGE
*/ */
public static EC2HardwareBuilder m2_4xlarge() { public static EC2HardwareBuilder m2_4xlarge() {
return new EC2HardwareBuilder(InstanceType.M2_4XLARGE) return new EC2HardwareBuilder(InstanceType.M2_4XLARGE).m2()
.ram(70041) .ram(70041)
.processors(ImmutableList.of(new Processor(8.0, 3.25))) .processors(ImmutableList.of(new Processor(8.0, 3.25)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -345,7 +450,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#M3_MEDIUM * @see InstanceType#M3_MEDIUM
*/ */
public static EC2HardwareBuilder m3_medium() { public static EC2HardwareBuilder m3_medium() {
return new EC2HardwareBuilder(InstanceType.M3_MEDIUM) return new EC2HardwareBuilder(InstanceType.M3_MEDIUM).m3()
.ram(3840) .ram(3840)
.processors(ImmutableList.of(new Processor(1.0, 3.0))) .processors(ImmutableList.of(new Processor(1.0, 3.0)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -357,7 +462,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#M3_LARGE * @see InstanceType#M3_LARGE
*/ */
public static EC2HardwareBuilder m3_large() { public static EC2HardwareBuilder m3_large() {
return new EC2HardwareBuilder(InstanceType.M3_LARGE) return new EC2HardwareBuilder(InstanceType.M3_LARGE).m3()
.ram(7680) .ram(7680)
.processors(ImmutableList.of(new Processor(2.0, 3.25))) .processors(ImmutableList.of(new Processor(2.0, 3.25)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -369,7 +474,8 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#M3_XLARGE * @see InstanceType#M3_XLARGE
*/ */
public static EC2HardwareBuilder m3_xlarge() { public static EC2HardwareBuilder m3_xlarge() {
return new EC2HardwareBuilder(InstanceType.M3_XLARGE).ram(15360) return new EC2HardwareBuilder(InstanceType.M3_XLARGE).m3()
.ram(15360)
.processors(ImmutableList.of(new Processor(4.0, 3.25))) .processors(ImmutableList.of(new Processor(4.0, 3.25)))
.is64Bit(true) .is64Bit(true)
.volumes(ImmutableList.<Volume>of( .volumes(ImmutableList.<Volume>of(
@ -382,13 +488,14 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#M3_2XLARGE * @see InstanceType#M3_2XLARGE
*/ */
public static EC2HardwareBuilder m3_2xlarge() { public static EC2HardwareBuilder m3_2xlarge() {
return new EC2HardwareBuilder(InstanceType.M3_2XLARGE).ram(30720) return new EC2HardwareBuilder(InstanceType.M3_2XLARGE).m3()
.processors(ImmutableList.of(new Processor(8.0, 3.25))) .ram(30720)
.is64Bit(true) .processors(ImmutableList.of(new Processor(8.0, 3.25)))
.volumes(ImmutableList.<Volume>of( .is64Bit(true)
new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), .volumes(ImmutableList.<Volume> of(
new VolumeBuilder().type(LOCAL).size(80.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(),
new VolumeBuilder().type(LOCAL).size(80.0f).device("/dev/sdc").bootDevice(false).durable(false).build())); new VolumeBuilder().type(LOCAL).size(80.0f).device("/dev/sdb").bootDevice(false).durable(false).build(),
new VolumeBuilder().type(LOCAL).size(80.0f).device("/dev/sdc").bootDevice(false).durable(false).build()));
} }
/** /**
@ -445,7 +552,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#C1_MEDIUM * @see InstanceType#C1_MEDIUM
*/ */
public static EC2HardwareBuilder c1_medium() { public static EC2HardwareBuilder c1_medium() {
return new EC2HardwareBuilder(InstanceType.C1_MEDIUM) return new EC2HardwareBuilder(InstanceType.C1_MEDIUM).c1()
.ram(1740) .ram(1740)
.processors(ImmutableList.of(new Processor(2.0, 2.5))) .processors(ImmutableList.of(new Processor(2.0, 2.5)))
.volumes(ImmutableList.<Volume>of( .volumes(ImmutableList.<Volume>of(
@ -457,7 +564,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#C1_XLARGE * @see InstanceType#C1_XLARGE
*/ */
public static EC2HardwareBuilder c1_xlarge() { public static EC2HardwareBuilder c1_xlarge() {
return new EC2HardwareBuilder(InstanceType.C1_XLARGE) return new EC2HardwareBuilder(InstanceType.C1_XLARGE).c1()
.ram(7168) .ram(7168)
.processors(ImmutableList.of(new Processor(8.0, 2.5))) .processors(ImmutableList.of(new Processor(8.0, 2.5)))
.volumes(ImmutableList.<Volume>of( .volumes(ImmutableList.<Volume>of(
@ -473,7 +580,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#C3_LARGE * @see InstanceType#C3_LARGE
*/ */
public static EC2HardwareBuilder c3_large() { public static EC2HardwareBuilder c3_large() {
return new EC2HardwareBuilder(InstanceType.C3_LARGE) return new EC2HardwareBuilder(InstanceType.C3_LARGE).c3()
.ram(3750) .ram(3750)
.processors(ImmutableList.of(new Processor(2.0, 3.5))) .processors(ImmutableList.of(new Processor(2.0, 3.5)))
.volumes(ImmutableList.<Volume>of( .volumes(ImmutableList.<Volume>of(
@ -487,7 +594,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#C3_XLARGE * @see InstanceType#C3_XLARGE
*/ */
public static EC2HardwareBuilder c3_xlarge() { public static EC2HardwareBuilder c3_xlarge() {
return new EC2HardwareBuilder(InstanceType.C3_XLARGE) return new EC2HardwareBuilder(InstanceType.C3_XLARGE).c3()
.ram(7168) .ram(7168)
.processors(ImmutableList.of(new Processor(4.0, 3.5))) .processors(ImmutableList.of(new Processor(4.0, 3.5)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -501,7 +608,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#C3_2XLARGE * @see InstanceType#C3_2XLARGE
*/ */
public static EC2HardwareBuilder c3_2xlarge() { public static EC2HardwareBuilder c3_2xlarge() {
return new EC2HardwareBuilder(InstanceType.C3_2XLARGE) return new EC2HardwareBuilder(InstanceType.C3_2XLARGE).c3()
.ram(15360) .ram(15360)
.processors(ImmutableList.of(new Processor(8.0, 3.5))) .processors(ImmutableList.of(new Processor(8.0, 3.5)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -515,7 +622,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#C3_4XLARGE * @see InstanceType#C3_4XLARGE
*/ */
public static EC2HardwareBuilder c3_4xlarge() { public static EC2HardwareBuilder c3_4xlarge() {
return new EC2HardwareBuilder(InstanceType.C3_4XLARGE) return new EC2HardwareBuilder(InstanceType.C3_4XLARGE).c3()
.ram(30720) .ram(30720)
.processors(ImmutableList.of(new Processor(16.0, 3.4375))) .processors(ImmutableList.of(new Processor(16.0, 3.4375)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -529,7 +636,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#C3_8XLARGE * @see InstanceType#C3_8XLARGE
*/ */
public static EC2HardwareBuilder c3_8xlarge() { public static EC2HardwareBuilder c3_8xlarge() {
return new EC2HardwareBuilder(InstanceType.C3_8XLARGE) return new EC2HardwareBuilder(InstanceType.C3_8XLARGE).c3()
.ram(61440) .ram(61440)
.processors(ImmutableList.of(new Processor(32.0, 3.375))) .processors(ImmutableList.of(new Processor(32.0, 3.375)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -543,7 +650,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#C4_LARGE * @see InstanceType#C4_LARGE
*/ */
public static EC2HardwareBuilder c4_large() { public static EC2HardwareBuilder c4_large() {
return new EC2HardwareBuilder(InstanceType.C4_LARGE) return new EC2HardwareBuilder(InstanceType.C4_LARGE).c4()
.ram(3840) .ram(3840)
.processors(ImmutableList.of(new Processor(2.0, 3.5))) .processors(ImmutableList.of(new Processor(2.0, 3.5)))
.rootDeviceType(RootDeviceType.EBS); .rootDeviceType(RootDeviceType.EBS);
@ -553,7 +660,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#C4_XLARGE * @see InstanceType#C4_XLARGE
*/ */
public static EC2HardwareBuilder c4_xlarge() { public static EC2HardwareBuilder c4_xlarge() {
return new EC2HardwareBuilder(InstanceType.C4_XLARGE) return new EC2HardwareBuilder(InstanceType.C4_XLARGE).c4()
.ram(7680) .ram(7680)
.processors(ImmutableList.of(new Processor(4.0, 3.5))) .processors(ImmutableList.of(new Processor(4.0, 3.5)))
.rootDeviceType(RootDeviceType.EBS); .rootDeviceType(RootDeviceType.EBS);
@ -563,7 +670,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#C4_2XLARGE * @see InstanceType#C4_2XLARGE
*/ */
public static EC2HardwareBuilder c4_2xlarge() { public static EC2HardwareBuilder c4_2xlarge() {
return new EC2HardwareBuilder(InstanceType.C4_2XLARGE) return new EC2HardwareBuilder(InstanceType.C4_2XLARGE).c4()
.ram(15360) .ram(15360)
.processors(ImmutableList.of(new Processor(8.0, 3.5))) .processors(ImmutableList.of(new Processor(8.0, 3.5)))
.rootDeviceType(RootDeviceType.EBS); .rootDeviceType(RootDeviceType.EBS);
@ -573,7 +680,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#C4_4XLARGE * @see InstanceType#C4_4XLARGE
*/ */
public static EC2HardwareBuilder c4_4xlarge() { public static EC2HardwareBuilder c4_4xlarge() {
return new EC2HardwareBuilder(InstanceType.C4_4XLARGE) return new EC2HardwareBuilder(InstanceType.C4_4XLARGE).c4()
.ram(30720) .ram(30720)
.processors(ImmutableList.of(new Processor(16.0, 3.5))) .processors(ImmutableList.of(new Processor(16.0, 3.5)))
.rootDeviceType(RootDeviceType.EBS); .rootDeviceType(RootDeviceType.EBS);
@ -583,7 +690,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#C4_8XLARGE * @see InstanceType#C4_8XLARGE
*/ */
public static EC2HardwareBuilder c4_8xlarge() { public static EC2HardwareBuilder c4_8xlarge() {
return new EC2HardwareBuilder(InstanceType.C4_8XLARGE) return new EC2HardwareBuilder(InstanceType.C4_8XLARGE).c4()
.ram(61440) .ram(61440)
.processors(ImmutableList.of(new Processor(36.0, 3.5))) .processors(ImmutableList.of(new Processor(36.0, 3.5)))
.rootDeviceType(RootDeviceType.EBS); .rootDeviceType(RootDeviceType.EBS);
@ -683,7 +790,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
} }
public static EC2HardwareBuilder cg1_4xlarge() { public static EC2HardwareBuilder cg1_4xlarge() {
return new EC2HardwareBuilder(InstanceType.CG1_4XLARGE) return new EC2HardwareBuilder(InstanceType.CG1_4XLARGE).cg1()
.ram(22 * 1024) .ram(22 * 1024)
.processors(ImmutableList.of(new Processor(4.0, 4.0), new Processor(4.0, 4.0))) .processors(ImmutableList.of(new Processor(4.0, 4.0), new Processor(4.0, 4.0)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -694,7 +801,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
} }
public static EC2HardwareBuilder cc1_4xlarge() { public static EC2HardwareBuilder cc1_4xlarge() {
return new EC2HardwareBuilder(InstanceType.CC1_4XLARGE) return new EC2HardwareBuilder(InstanceType.CC1_4XLARGE).cc1()
.ram(23 * 1024) .ram(23 * 1024)
.processors(ImmutableList.of(new Processor(4.0, 4.0), new Processor(4.0, 4.0))) .processors(ImmutableList.of(new Processor(4.0, 4.0), new Processor(4.0, 4.0)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -705,7 +812,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
} }
public static EC2HardwareBuilder cc2_8xlarge() { public static EC2HardwareBuilder cc2_8xlarge() {
return new EC2HardwareBuilder(InstanceType.CC2_8XLARGE) return new EC2HardwareBuilder(InstanceType.CC2_8XLARGE).cc2()
.ram(60 * 1024 + 512) .ram(60 * 1024 + 512)
.processors(ImmutableList.of(new Processor(8.0, 5.5), new Processor(8.0, 5.5))) .processors(ImmutableList.of(new Processor(8.0, 5.5), new Processor(8.0, 5.5)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -721,7 +828,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#G2_2XLARGE * @see InstanceType#G2_2XLARGE
*/ */
public static EC2HardwareBuilder g2_2xlarge() { public static EC2HardwareBuilder g2_2xlarge() {
return new EC2HardwareBuilder(InstanceType.G2_2XLARGE) return new EC2HardwareBuilder(InstanceType.G2_2XLARGE).g2()
.ram(15 * 1024) .ram(15 * 1024)
.processors(ImmutableList.of(new Processor(8.0, 3.25))) .processors(ImmutableList.of(new Processor(8.0, 3.25)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -734,7 +841,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#I2_XLARGE * @see InstanceType#I2_XLARGE
*/ */
public static EC2HardwareBuilder i2_xlarge() { public static EC2HardwareBuilder i2_xlarge() {
return new EC2HardwareBuilder(InstanceType.I2_XLARGE) return new EC2HardwareBuilder(InstanceType.I2_XLARGE).i2()
.ram(30 * 1024 + 512) .ram(30 * 1024 + 512)
.processors(ImmutableList.of(new Processor(4.0, 3.5))) .processors(ImmutableList.of(new Processor(4.0, 3.5)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -747,7 +854,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#I2_2XLARGE * @see InstanceType#I2_2XLARGE
*/ */
public static EC2HardwareBuilder i2_2xlarge() { public static EC2HardwareBuilder i2_2xlarge() {
return new EC2HardwareBuilder(InstanceType.I2_2XLARGE) return new EC2HardwareBuilder(InstanceType.I2_2XLARGE).i2()
.ram(61 * 1024) .ram(61 * 1024)
.processors(ImmutableList.of(new Processor(8.0, 3.375))) .processors(ImmutableList.of(new Processor(8.0, 3.375)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -761,7 +868,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#I2_4XLARGE * @see InstanceType#I2_4XLARGE
*/ */
public static EC2HardwareBuilder i2_4xlarge() { public static EC2HardwareBuilder i2_4xlarge() {
return new EC2HardwareBuilder(InstanceType.I2_4XLARGE) return new EC2HardwareBuilder(InstanceType.I2_4XLARGE).i2()
.ram(122 * 1024) .ram(122 * 1024)
.processors(ImmutableList.of(new Processor(16.0, 3.3125))) .processors(ImmutableList.of(new Processor(16.0, 3.3125)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -777,7 +884,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#I2_8XLARGE * @see InstanceType#I2_8XLARGE
*/ */
public static EC2HardwareBuilder i2_8xlarge() { public static EC2HardwareBuilder i2_8xlarge() {
return new EC2HardwareBuilder(InstanceType.I2_8XLARGE) return new EC2HardwareBuilder(InstanceType.I2_8XLARGE).i2()
.ram(244 * 1024) .ram(244 * 1024)
.processors(ImmutableList.of(new Processor(32.0, 3.25))) .processors(ImmutableList.of(new Processor(32.0, 3.25)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -794,7 +901,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
} }
public static EC2HardwareBuilder hi1_4xlarge() { public static EC2HardwareBuilder hi1_4xlarge() {
return new EC2HardwareBuilder(InstanceType.HI1_4XLARGE) return new EC2HardwareBuilder(InstanceType.HI1_4XLARGE).hi1()
.ram(60 * 1024 + 512) .ram(60 * 1024 + 512)
.processors(ImmutableList.of(new Processor(16.0, 2.1875))) .processors(ImmutableList.of(new Processor(16.0, 2.1875)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -811,7 +918,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
'q', 'r', 's', 't', 'u', 'v', 'w', 'x')) { 'q', 'r', 's', 't', 'u', 'v', 'w', 'x')) {
all24Volumes.add(new VolumeBuilder().type(LOCAL).size(twoTB).device("/dev/sd" + letter).bootDevice(false).durable(false).build()); all24Volumes.add(new VolumeBuilder().type(LOCAL).size(twoTB).device("/dev/sd" + letter).bootDevice(false).durable(false).build());
} }
return new EC2HardwareBuilder(InstanceType.HS1_8XLARGE) return new EC2HardwareBuilder(InstanceType.HS1_8XLARGE).hs1()
.ram(117 * 1024) .ram(117 * 1024)
.processors(ImmutableList.of(new Processor(16.0, 2.1875))) .processors(ImmutableList.of(new Processor(16.0, 2.1875)))
.volumes(all24Volumes.build()) .volumes(all24Volumes.build())
@ -822,7 +929,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#R3_LARGE * @see InstanceType#R3_LARGE
*/ */
public static EC2HardwareBuilder r3_large() { public static EC2HardwareBuilder r3_large() {
return new EC2HardwareBuilder(InstanceType.R3_LARGE) return new EC2HardwareBuilder(InstanceType.R3_LARGE).r3()
.ram(15616) .ram(15616)
.processors(ImmutableList.of(new Processor(2.0, 2.5))) .processors(ImmutableList.of(new Processor(2.0, 2.5)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -834,7 +941,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#R3_XLARGE * @see InstanceType#R3_XLARGE
*/ */
public static EC2HardwareBuilder r3_xlarge() { public static EC2HardwareBuilder r3_xlarge() {
return new EC2HardwareBuilder(InstanceType.R3_XLARGE) return new EC2HardwareBuilder(InstanceType.R3_XLARGE).r3()
.ram(31232) .ram(31232)
.processors(ImmutableList.of(new Processor(4.0, 2.5))) .processors(ImmutableList.of(new Processor(4.0, 2.5)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -846,7 +953,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#R3_2XLARGE * @see InstanceType#R3_2XLARGE
*/ */
public static EC2HardwareBuilder r3_2xlarge() { public static EC2HardwareBuilder r3_2xlarge() {
return new EC2HardwareBuilder(InstanceType.R3_2XLARGE) return new EC2HardwareBuilder(InstanceType.R3_2XLARGE).r3()
.ram(62464) .ram(62464)
.processors(ImmutableList.of(new Processor(8.0, 2.5))) .processors(ImmutableList.of(new Processor(8.0, 2.5)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -858,7 +965,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#R3_4XLARGE * @see InstanceType#R3_4XLARGE
*/ */
public static EC2HardwareBuilder r3_4xlarge() { public static EC2HardwareBuilder r3_4xlarge() {
return new EC2HardwareBuilder(InstanceType.R3_4XLARGE) return new EC2HardwareBuilder(InstanceType.R3_4XLARGE).r3()
.ram(124928) .ram(124928)
.processors(ImmutableList.of(new Processor(16.0, 2.5))) .processors(ImmutableList.of(new Processor(16.0, 2.5)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -870,7 +977,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
* @see InstanceType#R3_8XLARGE * @see InstanceType#R3_8XLARGE
*/ */
public static EC2HardwareBuilder r3_8xlarge() { public static EC2HardwareBuilder r3_8xlarge() {
return new EC2HardwareBuilder(InstanceType.R3_8XLARGE) return new EC2HardwareBuilder(InstanceType.R3_8XLARGE).r3()
.ram(249856) .ram(249856)
.processors(ImmutableList.of(new Processor(32.0, 2.5))) .processors(ImmutableList.of(new Processor(32.0, 2.5)))
.volumes(ImmutableList.<Volume> of( .volumes(ImmutableList.<Volume> of(
@ -882,6 +989,7 @@ public class EC2HardwareBuilder extends HardwareBuilder {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Override @Override
public Hardware build() { public Hardware build() {
Preconditions.checkNotNull(virtualizationType, "virtualizationType");
boolean reset = false; boolean reset = false;
if (this.supportsImage == null) if (this.supportsImage == null)
reset = true; reset = true;