JCLOUDS-1460: Adding instances to AWS
diff --git a/apis/ec2/src/main/java/org/jclouds/ec2/compute/domain/EC2HardwareBuilder.java b/apis/ec2/src/main/java/org/jclouds/ec2/compute/domain/EC2HardwareBuilder.java
index d5adcc2..a8f4c55 100644
--- a/apis/ec2/src/main/java/org/jclouds/ec2/compute/domain/EC2HardwareBuilder.java
+++ b/apis/ec2/src/main/java/org/jclouds/ec2/compute/domain/EC2HardwareBuilder.java
@@ -228,7 +228,13 @@
       
       return this;
    }
-   
+
+   private EC2HardwareBuilder t3() {
+      virtualizationType(VirtualizationType.HVM);
+
+      return this;
+   }
+
    private EC2HardwareBuilder m3() {
       virtualizationTypes(VirtualizationType.HVM, VirtualizationType.PARAVIRTUAL);
       return this;
@@ -394,12 +400,21 @@
    }
 
    /**
+    * @see InstanceType#T2_NANO
+    */
+   public static EC2HardwareBuilder t2_nano() {
+      return new EC2HardwareBuilder(InstanceType.T2_NANO).t2()
+              .ram(512)
+              .processors(ImmutableList.of(new Processor(1.0, 3.3))).rootDeviceType(RootDeviceType.EBS);
+   }
+
+   /**
     * @see InstanceType#T2_MICRO
     */
    public static EC2HardwareBuilder t2_micro() {
       return new EC2HardwareBuilder(InstanceType.T2_MICRO).t2()
             .ram(1024)
-            .processors(ImmutableList.of(new Processor(1.0, 0.1))).rootDeviceType(RootDeviceType.EBS);
+            .processors(ImmutableList.of(new Processor(1.0, 3.3))).rootDeviceType(RootDeviceType.EBS);
    }
 
    /**
@@ -408,7 +423,7 @@
    public static EC2HardwareBuilder t2_small() {
       return new EC2HardwareBuilder(InstanceType.T2_SMALL).t2()
             .ram(2048)
-            .processors(ImmutableList.of(new Processor(1.0, 0.2))).rootDeviceType(RootDeviceType.EBS);
+            .processors(ImmutableList.of(new Processor(1.0, 3.3))).rootDeviceType(RootDeviceType.EBS);
    }
 
    /**
@@ -417,7 +432,7 @@
    public static EC2HardwareBuilder t2_medium() {
       return new EC2HardwareBuilder(InstanceType.T2_MEDIUM).t2()
             .ram(4096)
-            .processors(ImmutableList.of(new Processor(1.0, 0.4))).rootDeviceType(RootDeviceType.EBS);
+            .processors(ImmutableList.of(new Processor(2.0, 3.3))).rootDeviceType(RootDeviceType.EBS);
    }
 
    /**
@@ -426,10 +441,93 @@
    public static EC2HardwareBuilder t2_large() {
       return new EC2HardwareBuilder(InstanceType.T2_LARGE).t2()
             .ram(8192)
-            .processors(ImmutableList.of(new Processor(1.0, 0.4))).rootDeviceType(RootDeviceType.EBS);
+            .processors(ImmutableList.of(new Processor(2.0, 3.0))).rootDeviceType(RootDeviceType.EBS);
    }
 
    /**
+    * @see InstanceType#T2_XLARGE
+    */
+   public static EC2HardwareBuilder t2_xlarge() {
+      return new EC2HardwareBuilder(InstanceType.T2_XLARGE).t2()
+              .ram(16384)
+              .processors(ImmutableList.of(new Processor(4.0, 3.0))).rootDeviceType(RootDeviceType.EBS);
+   }
+
+   /**
+    * @see InstanceType#T2_2XLARGE
+    */
+   public static EC2HardwareBuilder t2_2xlarge() {
+      return new EC2HardwareBuilder(InstanceType.T2_2XLARGE).t2()
+              .ram(32768)
+              .processors(ImmutableList.of(new Processor(8.0, 3.0))).rootDeviceType(RootDeviceType.EBS);
+   }
+
+   /**
+    * @see InstanceType#T3_NANO
+    */
+   public static EC2HardwareBuilder t3_nano() {
+      return new EC2HardwareBuilder(InstanceType.T3_NANO).t3()
+              .ram(512)
+              .processors(ImmutableList.of(new Processor(2.0, 2.5))).rootDeviceType(RootDeviceType.EBS);
+   }
+
+   /**
+    * @see InstanceType#T3_MICRO
+    */
+   public static EC2HardwareBuilder t3_micro() {
+      return new EC2HardwareBuilder(InstanceType.T3_MICRO).t3()
+              .ram(1024)
+              .processors(ImmutableList.of(new Processor(2.0, 2.5))).rootDeviceType(RootDeviceType.EBS);
+   }
+
+   /**
+    * @see InstanceType#T3_SMALL
+    */
+   public static EC2HardwareBuilder t3_small() {
+      return new EC2HardwareBuilder(InstanceType.T3_SMALL).t3()
+              .ram(2048)
+              .processors(ImmutableList.of(new Processor(2.0, 2.5))).rootDeviceType(RootDeviceType.EBS);
+   }
+
+   /**
+    * @see InstanceType#T3_MEDIUM
+    */
+   public static EC2HardwareBuilder t3_medium() {
+      return new EC2HardwareBuilder(InstanceType.T3_MEDIUM).t3()
+              .ram(4096)
+              .processors(ImmutableList.of(new Processor(2.0, 2.5))).rootDeviceType(RootDeviceType.EBS);
+   }
+
+   /**
+    * @see InstanceType#T3_LARGE
+    */
+   public static EC2HardwareBuilder t3_large() {
+      return new EC2HardwareBuilder(InstanceType.T3_LARGE).t3()
+              .ram(8192)
+              .processors(ImmutableList.of(new Processor(2.0, 2.5))).rootDeviceType(RootDeviceType.EBS);
+   }
+
+   /**
+    * @see InstanceType#T3_XLARGE
+    */
+   public static EC2HardwareBuilder t3_xlarge() {
+      return new EC2HardwareBuilder(InstanceType.T3_XLARGE).t3()
+              .ram(16384)
+              .processors(ImmutableList.of(new Processor(4.0, 2.5))).rootDeviceType(RootDeviceType.EBS);
+   }
+
+   /**
+    * @see InstanceType#T3_2XLARGE
+    */
+   public static EC2HardwareBuilder t3_2xlarge() {
+      return new EC2HardwareBuilder(InstanceType.T3_2XLARGE).t3()
+              .ram(32768)
+              .processors(ImmutableList.of(new Processor(8.0, 2.5))).rootDeviceType(RootDeviceType.EBS);
+   }
+
+
+
+   /**
     * @see InstanceType#M1_LARGE
     */
    public static EC2HardwareBuilder m1_large() {
@@ -606,6 +704,17 @@
    }
 
    /**
+    * @see InstanceType#M4_16XLARGE
+    */
+   public static EC2HardwareBuilder m4_16xlarge() {
+      return new EC2HardwareBuilder(InstanceType.M4_16XLARGE).m4()
+              .ram(262144)
+              .processors(ImmutableList.of(new Processor(64.0, 3.1125)))
+              .is64Bit(true)
+              .rootDeviceType(RootDeviceType.EBS);
+   }
+
+   /**
     * @see InstanceType#M5_LARGE
     */
    public static EC2HardwareBuilder m5_large() {
diff --git a/apis/ec2/src/main/java/org/jclouds/ec2/domain/InstanceType.java b/apis/ec2/src/main/java/org/jclouds/ec2/domain/InstanceType.java
index 2faf2a4..1a01031 100644
--- a/apis/ec2/src/main/java/org/jclouds/ec2/domain/InstanceType.java
+++ b/apis/ec2/src/main/java/org/jclouds/ec2/domain/InstanceType.java
@@ -32,6 +32,17 @@
    /**
     * Micro Burstable Performance Instance
     * <ul>
+    * <li>512 MB memory</li>
+    * <li>1 vCPU / 10% baseline performance</li>
+    * <li>No instance storage (EBS storage only)</li>
+    * <li>64-bit platform</li>
+    * </ul>
+    */
+   public static final String T2_NANO = "t2.nano";
+
+   /**
+    * Micro Burstable Performance Instance
+    * <ul>
     * <li>1 GB memory</li>
     * <li>1 vCPU / 10% baseline performance</li>
     * <li>No instance storage (EBS storage only)</li>
@@ -73,6 +84,105 @@
     */
    public static final String T2_LARGE = "t2.large";
 
+   /**
+    * Micro Burstable Performance Instance
+    * <ul>
+    * <li>16 GB memory</li>
+    * <li>4 vCPU / 40% baseline performance</li>
+    * <li>No instance storage (EBS storage only)</li>
+    * <li>64-bit platform</li>
+    * </ul>
+    */
+   public static final String T2_XLARGE = "t2.xlarge";
+
+   /**
+    * Micro Burstable Performance Instance
+    * <ul>
+    * <li>32 GB memory</li>
+    * <li>8 vCPU / 40% baseline performance</li>
+    * <li>No instance storage (EBS storage only)</li>
+    * <li>64-bit platform</li>
+    * </ul>
+    */
+   public static final String T2_2XLARGE = "t2.2xlarge";
+
+   /**
+    * Micro Burstable Performance Instance
+    * <ul>
+    * <li>512 MB memory</li>
+    * <li>2 vCPU / 10% baseline performance</li>
+    * <li>No instance storage (EBS storage only)</li>
+    * <li>64-bit platform</li>
+    * </ul>
+    */
+   public static final String T3_NANO = "t3.nano";
+
+   /**
+    * Micro Burstable Performance Instance
+    * <ul>
+    * <li>1 GB memory</li>
+    * <li>2 vCPU / 10% baseline performance</li>
+    * <li>No instance storage (EBS storage only)</li>
+    * <li>64-bit platform</li>
+    * </ul>
+    */
+   public static final String T3_MICRO = "t3.micro";
+
+   /**
+    * Micro Burstable Performance Instance
+    * <ul>
+    * <li>2 GB memory</li>
+    * <li>2 vCPU / 10% baseline performance</li>
+    * <li>No instance storage (EBS storage only)</li>
+    * <li>64-bit platform</li>
+    * </ul>
+    */
+   public static final String T3_SMALL = "t3.small";
+
+   /**
+    * Micro Burstable Performance Instance
+    * <ul>
+    * <li>4 GB memory</li>
+    * <li>2 vCPU / 10% baseline performance</li>
+    * <li>No instance storage (EBS storage only)</li>
+    * <li>64-bit platform</li>
+    * </ul>
+    */
+   public static final String T3_MEDIUM = "t3.medium";
+
+   /**
+    * Micro Burstable Performance Instance
+    * <ul>
+    * <li>8 GB memory</li>
+    * <li>2 vCPU / 10% baseline performance</li>
+    * <li>No instance storage (EBS storage only)</li>
+    * <li>64-bit platform</li>
+    * </ul>
+    */
+   public static final String T3_LARGE = "t3.large";
+
+   /**
+    * Micro Burstable Performance Instance
+    * <ul>
+    * <li>16 GB memory</li>
+    * <li>4 vCPU / 10% baseline performance</li>
+    * <li>No instance storage (EBS storage only)</li>
+    * <li>64-bit platform</li>
+    * </ul>
+    */
+   public static final String T3_XLARGE = "t3.xlarge";
+
+   /**
+    * Micro Burstable Performance Instance
+    * <ul>
+    * <li>32 GB memory</li>
+    * <li>8 vCPU / 10% baseline performance</li>
+    * <li>No instance storage (EBS storage only)</li>
+    * <li>64-bit platform</li>
+    * </ul>
+    */
+   public static final String T3_2XLARGE = "t3.2xlarge";
+
     /**
     * Small Instance
     * <ul>
@@ -269,6 +379,18 @@
    public static final String M4_10XLARGE = "m4.10xlarge";
 
    /**
+    * M4 Sexdecuple Extra Large Instance
+    * <ul>
+    * <li>256 GiB memory</li>
+    * <li>199.2 EC2 Compute Units (64 virtual cores with 3.1125 EC2 Compute Units each)</li>
+    * <li>EBS storage only</li>
+    * <li>64-bit platform</li>
+    * <li>I/O Performance: High</li>
+    * </ul>
+    */
+   public static final String M4_16XLARGE = "m4.16xlarge";
+
+   /**
     * M5 Large Instance
     * <ul>
     * <li>8 GiB memory</li>
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/suppliers/AWSEC2HardwareSupplier.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/suppliers/AWSEC2HardwareSupplier.java
index cd334fc..119ab57 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/suppliers/AWSEC2HardwareSupplier.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/suppliers/AWSEC2HardwareSupplier.java
@@ -60,6 +60,7 @@
 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.m3_medium;
 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.m3_xlarge;
 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.m4_10xlarge;
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.m4_16xlarge;
 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.m4_2xlarge;
 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.m4_4xlarge;
 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.m4_large;
@@ -85,7 +86,17 @@
 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.t2_large;
 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.t2_medium;
 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.t2_micro;
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.t2_nano;
 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.t2_small;
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.t2_xlarge;
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.t2_2xlarge;
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.t3_nano;
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.t3_micro;
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.t3_small;
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.t3_medium;
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.t3_large;
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.t3_xlarge;
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.t3_2xlarge;
 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.x1_16xlarge;
 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.x1_32xlarge;
 
@@ -122,10 +133,20 @@
       sizes.add(g2_2xlarge().supportsImageIds(ccAmis).build());
 
       sizes.add(t1_micro().build());
+      sizes.add(t2_nano().build());
       sizes.add(t2_micro().build());
       sizes.add(t2_small().build());
       sizes.add(t2_medium().build());
       sizes.add(t2_large().build());
+      sizes.add(t2_xlarge().build());
+      sizes.add(t2_2xlarge().build());
+      sizes.add(t3_nano().build());
+      sizes.add(t3_micro().build());
+      sizes.add(t3_small().build());
+      sizes.add(t3_medium().build());
+      sizes.add(t3_large().build());
+      sizes.add(t3_xlarge().build());
+      sizes.add(t3_2xlarge().build());
       sizes.add(c1_medium().build());
       sizes.add(c1_xlarge().build());
       sizes.add(c3_large().build());
@@ -164,6 +185,7 @@
       sizes.add(m4_2xlarge().build());
       sizes.add(m4_4xlarge().build());
       sizes.add(m4_10xlarge().build());
+      sizes.add(m4_16xlarge().build());
       sizes.add(m5_large().build());
       sizes.add(m5_xlarge().build());
       sizes.add(m5_2xlarge().build());