You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by lu...@redhat.com on 2012/08/29 01:35:32 UTC

EC2: launch instances into a VPC (rev 2)

rev2
----

This time with tests, and with rerecordings so that existing tests don't
break.

rev1
----

As recently discussed, these patches make it possible to launch instances
into a subnet in a VPC in EC2.

Subnets appear as new realms with the name AZ:SN where AZ is the
availability zone (e.g., us-east-1a) to which the subnet is attached, and
SN is the subnet ID.

When such a realm is supplied to the create instances call, the SubnetID is
sent to EC2, placing the instane in that subnet.

Note that you can not provide a security group when launching into a VPC,
which makes the current HTML UI a little awkward, in that you have to
uncheck the 'default' security group in the UI under 'Additional
Parameters'

The VPC functionality requires some additional mappings from the AWS gem,
which I have sent upstream[1] - until they are in a released AWS gem, I am
including a monkey patch that puts them into the AWS::Ec2 class.

David

Re: EC2: launch instances into a VPC (rev 2)

Posted by David Lutterkort <lu...@redhat.com>.
On Thu, 2012-08-30 at 12:01 +0200, Michal Fojtik wrote:
> On Aug 30, 2012, at 12:35 AM, David Lutterkort <lu...@redhat.com> wrote:
> 
> > On Wed, 2012-08-29 at 11:55 +0200, Michal Fojtik wrote:
> >> Attached patch seems to fix that. Also I got some warnings in tests:
> >> 
> >> <snip>
> >> instance_test.rb:94: warning: class variable access from toplevel
> >> instance_test.rb:94: warning: class variable access from toplevel
> >> </snip>
> >> 
> >> But that is safe to ignore IMHO.
> >> 
> >> ACK if you include my patch ;]
> > 
> > I'd love to .. alas, no attachment ;)
> 
> Weird, I swear I attached it :) I uploaded it for sure here:
> 
> http://omicron.mifo.sk/0001-EC2-Fix-describe_availability_zones-method-under-MRI.patch
> 
>   -- Michal

Thanks .. pushed with that change.

David



Re: EC2: launch instances into a VPC (rev 2)

Posted by Michal Fojtik <mf...@redhat.com>.
On Aug 30, 2012, at 12:35 AM, David Lutterkort <lu...@redhat.com> wrote:

> On Wed, 2012-08-29 at 11:55 +0200, Michal Fojtik wrote:
>> Attached patch seems to fix that. Also I got some warnings in tests:
>> 
>> <snip>
>> instance_test.rb:94: warning: class variable access from toplevel
>> instance_test.rb:94: warning: class variable access from toplevel
>> </snip>
>> 
>> But that is safe to ignore IMHO.
>> 
>> ACK if you include my patch ;]
> 
> I'd love to .. alas, no attachment ;)

Weird, I swear I attached it :) I uploaded it for sure here:

http://omicron.mifo.sk/0001-EC2-Fix-describe_availability_zones-method-under-MRI.patch

  -- Michal

Michal Fojtik
http://deltacloud.org
mfojtik@redhat.com




Re: EC2: launch instances into a VPC (rev 2)

Posted by David Lutterkort <lu...@redhat.com>.
On Wed, 2012-08-29 at 11:55 +0200, Michal Fojtik wrote:
> Attached patch seems to fix that. Also I got some warnings in tests:
> 
> <snip>
> instance_test.rb:94: warning: class variable access from toplevel
> instance_test.rb:94: warning: class variable access from toplevel
> </snip>
> 
> But that is safe to ignore IMHO.
> 
> ACK if you include my patch ;]

I'd love to .. alas, no attachment ;)

David



Re: EC2: launch instances into a VPC (rev 2)

Posted by Michal Fojtik <mf...@redhat.com>.
On Aug 29, 2012, at 1:35 AM, lutter@redhat.com wrote:

Hi,

This set looks cool, however I still got two errors when running
tests on 1.9:

<snip>
test_0003_must allow to filter realms(Ec2Driver Realms):
Deltacloud::ExceptionHandler::ProviderError: undefined method `to_a' for "us-east-1a":String
    /Users/mfojtik/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/aws-2.5.6/lib/ec2/ec2.rb:1119:in `describe_availability_zones'
    /Users/mfojtik/code/core/server/lib/deltacloud/drivers/ec2/ec2_driver.rb:184:in `block in realms'
</snip>

Attached patch seems to fix that. Also I got some warnings in tests:

<snip>
instance_test.rb:94: warning: class variable access from toplevel
instance_test.rb:94: warning: class variable access from toplevel
</snip>

But that is safe to ignore IMHO.

ACK if you include my patch ;]


[PATCH 3/3] EC2: allow launching instances into a subnet

Posted by lu...@redhat.com.
From: David Lutterkort <lu...@redhat.com>

---
 server/lib/deltacloud/drivers/ec2/ec2_driver.rb    |   15 +-
 .../drivers/ec2/fixtures/create_resources.yml      |   36 +-
 .../drivers/ec2/fixtures/destroy_resources.yml     |   30 +-
 .../test_0005_must_list_VPC_subnets_as_realms.yml  |   42 ++-
 ...ust_allow_creating_instance_in_a_VPC_subnet.yml |  192 +++++++++
 ...llow_to_reboot_instance_in_running_state-10.yml |   76 ----
 ...allow_to_reboot_instance_in_running_state-7.yml |   88 -----
 ...allow_to_reboot_instance_in_running_state-8.yml |   88 -----
 ...allow_to_reboot_instance_in_running_state-9.yml |   88 -----
 ...reboot_instance_in_running_state-stopped-10.yml |   92 -----
 ...t_allow_to_reboot_instance_in_running_state.yml |  411 --------------------
 ...llow_to_reboot_instance_in_running_state-10.yml |   76 ++++
 ...allow_to_reboot_instance_in_running_state-8.yml |   88 +++++
 ...allow_to_reboot_instance_in_running_state-9.yml |   76 ++++
 ...reboot_instance_in_running_state-stopped-10.yml |   92 +++++
 ...t_allow_to_reboot_instance_in_running_state.yml |  411 ++++++++++++++++++++
 ...allow_to_reboot_instance_in_running_state-9.yml |   88 +++++
 server/tests/drivers/ec2/instance_test.rb          |   10 +
 18 files changed, 1104 insertions(+), 895 deletions(-)
 create mode 100644 server/tests/drivers/ec2/fixtures/test_0007_must_allow_creating_instance_in_a_VPC_subnet.yml
 delete mode 100644 server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-10.yml
 delete mode 100644 server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-7.yml
 delete mode 100644 server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-8.yml
 delete mode 100644 server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-9.yml
 delete mode 100644 server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-stopped-10.yml
 delete mode 100644 server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state.yml
 create mode 100644 server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state-10.yml
 create mode 100644 server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state-8.yml
 create mode 100644 server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state-9.yml
 create mode 100644 server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state-stopped-10.yml
 create mode 100644 server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state.yml
 create mode 100644 server/tests/drivers/ec2/fixtures/test_0009_must_allow_to_reboot_instance_in_running_state-9.yml

diff --git a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
index 31fcfa5..b275f98 100644
--- a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
+++ b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
@@ -263,8 +263,15 @@ module Deltacloud
           if opts[:metrics] and !opts[:metrics].empty?
             instance_options[:monitoring_enabled] = true
           end
+          if opts[:realm_id]
+            az, sn = opts[:realm_id].split(":")
+            if sn
+              instance_options[:subnet_id] = sn
+            else
+              instance_options[:availability_zone] = az
+            end
+          end
           instance_options[:key_name] = opts[:keyname] if opts[:keyname]
-          instance_options[:availability_zone] = opts[:realm_id] if opts[:realm_id]
           instance_options[:instance_type] = opts[:hwp_id] if opts[:hwp_id] && opts[:hwp_id].length > 0
           firewalls = opts.inject([]){|res, (k,v)| res << v if k =~ /firewalls\d+$/; res}
           instance_options[:group_ids] = firewalls unless firewalls.empty?
@@ -919,6 +926,10 @@ module Deltacloud
           if instance[:aws_instance_type] == "t1.micro"
             inst_profile_opts[:hwp_architecture]=instance[:architecture]
           end
+          realm_id = instance[:aws_availability_zone]
+          unless instance[:subnet_id].empty?
+            realm_id = "#{realm_id}:#{instance[:subnet_id]}"
+          end
          Instance.new(
             :id => instance[:aws_instance_id],
             :name => instance[:aws_image_id],
@@ -929,7 +940,7 @@ module Deltacloud
             :keyname => instance[:ssh_key_name],
             :launch_time => instance[:aws_launch_time],
             :instance_profile => InstanceProfile.new(instance[:aws_instance_type], inst_profile_opts),
-            :realm_id => instance[:aws_availability_zone],
+            :realm_id => realm_id,
             :public_addresses => [InstanceAddress.new(instance[:dns_name], :type => :hostname)],
             :private_addresses => [InstanceAddress.new(instance[:private_dns_name], :type => :hostname)],
             :firewalls => instance[:aws_groups],
diff --git a/server/tests/drivers/ec2/fixtures/create_resources.yml b/server/tests/drivers/ec2/fixtures/create_resources.yml
index fb14d7b..85ea7c0 100644
--- a/server/tests/drivers/ec2/fixtures/create_resources.yml
+++ b/server/tests/drivers/ec2/fixtures/create_resources.yml
@@ -1,8 +1,9 @@
 --- 
+recorded_with: VCR 2.2.4
 http_interactions: 
 - request: 
     method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=CreateVpc&CidrBlock=172.16.0.0/16&Signature=1v+DVE5pE5wAGscby85h5Phi5O5OEl+3WgxOn/BgNaE=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T22:36:42.000Z&Version=2010-08-31
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=CreateVpc&CidrBlock=172.16.0.0/16&Signature=62kOuCAxVbNEYwqtW1kFLpUEVu4eJk91xpk3InvdGsY=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:23:35.000Z&Version=2010-08-31
     body: 
       string: ""
     headers: 
@@ -15,31 +16,31 @@ http_interactions:
       code: 200
       message: OK
     headers: 
-      Server: 
-      - AmazonEC2
+      Date: 
+      - Tue, 28 Aug 2012 23:23:36 GMT
       Transfer-Encoding: 
       - chunked
-      Date: 
-      - Tue, 28 Aug 2012 22:36:42 GMT
       Content-Type: 
       - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
     body: 
       string: |-
         <?xml version="1.0" encoding="UTF-8"?>
         <CreateVpcResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>12201e58-4637-4663-a0da-a9c3bcf49d5c</requestId>
+            <requestId>b4feaef5-9df4-4f49-8e61-83b95f78684a</requestId>
             <vpc>
-                <vpcId>vpc-6a952301</vpcId>
+                <vpcId>vpc-a276c0c9</vpcId>
                 <state>pending</state>
                 <cidrBlock>172.16.0.0/16</cidrBlock>
                 <dhcpOptionsId>default</dhcpOptionsId>
             </vpc>
         </CreateVpcResponse>
     http_version: 
-  recorded_at: Tue, 28 Aug 2012 22:36:42 GMT
+  recorded_at: Tue, 28 Aug 2012 23:23:36 GMT
 - request: 
     method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=CreateSubnet&AvailabilityZone=us-east-1b&CidrBlock=172.16.3.0/24&Signature=EIzFCEEuL0/0E/GVatWByMC0qybmPTw0+kd2xHnOGuw=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T22:36:42.000Z&Version=2010-08-31&VpcId=vpc-6a952301
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=CreateSubnet&AvailabilityZone=us-east-1b&CidrBlock=172.16.3.0/24&Signature=0K1m0h3jPi5++y2eYjVPf/tbX3iD1+XzALm8gtiG57M=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:23:36.000Z&Version=2010-08-31&VpcId=vpc-a276c0c9
     body: 
       string: ""
     headers: 
@@ -52,28 +53,27 @@ http_interactions:
       code: 200
       message: OK
     headers: 
-      Server: 
-      - AmazonEC2
+      Date: 
+      - Tue, 28 Aug 2012 23:23:36 GMT
       Transfer-Encoding: 
       - chunked
-      Date: 
-      - Tue, 28 Aug 2012 22:36:43 GMT
       Content-Type: 
       - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
     body: 
       string: |-
         <?xml version="1.0" encoding="UTF-8"?>
         <CreateSubnetResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>e3939c15-3c67-4e33-b1d8-88242dd2317c</requestId>
+            <requestId>8e6c33e3-f805-46ba-801e-2ca76cf1b3e5</requestId>
             <subnet>
-                <subnetId>subnet-62952309</subnetId>
+                <subnetId>subnet-a676c0cd</subnetId>
                 <state>pending</state>
-                <vpcId>vpc-6a952301</vpcId>
+                <vpcId>vpc-a276c0c9</vpcId>
                 <cidrBlock>172.16.3.0/24</cidrBlock>
                 <availableIpAddressCount>251</availableIpAddressCount>
                 <availabilityZone>us-east-1b</availabilityZone>
             </subnet>
         </CreateSubnetResponse>
     http_version: 
-  recorded_at: Tue, 28 Aug 2012 22:36:43 GMT
-recorded_with: VCR 2.2.4
+  recorded_at: Tue, 28 Aug 2012 23:23:36 GMT
diff --git a/server/tests/drivers/ec2/fixtures/destroy_resources.yml b/server/tests/drivers/ec2/fixtures/destroy_resources.yml
index 61020fa..1e9784f 100644
--- a/server/tests/drivers/ec2/fixtures/destroy_resources.yml
+++ b/server/tests/drivers/ec2/fixtures/destroy_resources.yml
@@ -1,8 +1,9 @@
 --- 
+recorded_with: VCR 2.2.4
 http_interactions: 
 - request: 
     method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DeleteSubnet&Signature=kpx0IU+viAUHCJMSNE+VAc/Hl0oqHdr08cFN7jwJW38=&SignatureMethod=HmacSHA256&SignatureVersion=2&SubnetId=subnet-62952309&Timestamp=2012-08-28T22:36:45.000Z&Version=2010-08-31
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DeleteSubnet&Signature=a4Q/5UWqc9RjkMvHxay5BIx2Hi5wASHEH1snK5KLruQ=&SignatureMethod=HmacSHA256&SignatureVersion=2&SubnetId=subnet-a676c0cd&Timestamp=2012-08-28T23:25:25.000Z&Version=2010-08-31
     body: 
       string: ""
     headers: 
@@ -15,26 +16,26 @@ http_interactions:
       code: 200
       message: OK
     headers: 
-      Server: 
-      - AmazonEC2
+      Date: 
+      - Tue, 28 Aug 2012 23:25:25 GMT
       Transfer-Encoding: 
       - chunked
-      Date: 
-      - Tue, 28 Aug 2012 22:36:46 GMT
       Content-Type: 
       - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
     body: 
       string: |-
         <?xml version="1.0" encoding="UTF-8"?>
         <DeleteSubnetResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>342eac4f-3687-4d89-92b7-0484b618947e</requestId>
+            <requestId>6797ff99-f447-4011-b5ac-7550fd4b16de</requestId>
             <return>true</return>
         </DeleteSubnetResponse>
     http_version: 
-  recorded_at: Tue, 28 Aug 2012 22:36:46 GMT
+  recorded_at: Tue, 28 Aug 2012 23:25:26 GMT
 - request: 
     method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DeleteVpc&Signature=OzOLWsGU2ZIwhaA46jecA/wwUeV+hFMu9d1XeUysvG0=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T22:36:46.000Z&Version=2010-08-31&VpcId=vpc-6a952301
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DeleteVpc&Signature=5khnoyyAahGeiGBPdWIxWJl/NITCPVvCb3QYyRJVK1A=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:25:26.000Z&Version=2010-08-31&VpcId=vpc-a276c0c9
     body: 
       string: ""
     headers: 
@@ -47,21 +48,20 @@ http_interactions:
       code: 200
       message: OK
     headers: 
-      Server: 
-      - AmazonEC2
+      Date: 
+      - Tue, 28 Aug 2012 23:25:26 GMT
       Transfer-Encoding: 
       - chunked
-      Date: 
-      - Tue, 28 Aug 2012 22:36:46 GMT
       Content-Type: 
       - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
     body: 
       string: |-
         <?xml version="1.0" encoding="UTF-8"?>
         <DeleteVpcResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>d3b55d09-5ece-4b07-a81a-5e9ef3b1d750</requestId>
+            <requestId>596e3e6f-0aa3-44f2-94ff-5b3959fed84b</requestId>
             <return>true</return>
         </DeleteVpcResponse>
     http_version: 
-  recorded_at: Tue, 28 Aug 2012 22:36:47 GMT
-recorded_with: VCR 2.2.4
+  recorded_at: Tue, 28 Aug 2012 23:25:26 GMT
diff --git a/server/tests/drivers/ec2/fixtures/test_0005_must_list_VPC_subnets_as_realms.yml b/server/tests/drivers/ec2/fixtures/test_0005_must_list_VPC_subnets_as_realms.yml
index fdce4eb..3cb6039 100644
--- a/server/tests/drivers/ec2/fixtures/test_0005_must_list_VPC_subnets_as_realms.yml
+++ b/server/tests/drivers/ec2/fixtures/test_0005_must_list_VPC_subnets_as_realms.yml
@@ -1,8 +1,9 @@
 --- 
+recorded_with: VCR 2.2.4
 http_interactions: 
 - request: 
     method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DescribeAvailabilityZones&Signature=v93MQI1cGoYMFByjuzOvr9DZAbE50n6cNkgTf4g8rJs=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T22:36:44.000Z&Version=2010-08-31
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DescribeAvailabilityZones&Signature=ubo/K69ZBrM5BTXwk5mcGytDQ2KSbwHD2hWLh67rejw=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:25:07.000Z&Version=2010-08-31
     body: 
       string: ""
     headers: 
@@ -15,19 +16,19 @@ http_interactions:
       code: 200
       message: OK
     headers: 
-      Server: 
-      - AmazonEC2
+      Date: 
+      - Tue, 28 Aug 2012 23:25:06 GMT
       Transfer-Encoding: 
       - chunked
-      Date: 
-      - Tue, 28 Aug 2012 22:36:45 GMT
       Content-Type: 
       - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
     body: 
       string: |-
         <?xml version="1.0" encoding="UTF-8"?>
         <DescribeAvailabilityZonesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>aa77686e-b8b2-4870-8f1e-6232077dbade</requestId>
+            <requestId>9ffa9aed-b47f-4a5a-96ab-1c6e554e0cb0</requestId>
             <availabilityZoneInfo>
                 <item>
                     <zoneName>us-east-1a</zoneName>
@@ -56,10 +57,10 @@ http_interactions:
             </availabilityZoneInfo>
         </DescribeAvailabilityZonesResponse>
     http_version: 
-  recorded_at: Tue, 28 Aug 2012 22:36:45 GMT
+  recorded_at: Tue, 28 Aug 2012 23:25:07 GMT
 - request: 
     method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DescribeSubnets&Signature=r2v7oE4F8OoTHhXc1NYAdJTr6giszS8MSsQ7prKHM4g=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T22:36:45.000Z&Version=2010-08-31
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DescribeSubnets&Signature=li4JSzmstzaJIi+7xN5T9sHaPEKIuqAjn4As7Gz8TfU=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:25:07.000Z&Version=2010-08-31
     body: 
       string: ""
     headers: 
@@ -72,21 +73,29 @@ http_interactions:
       code: 200
       message: OK
     headers: 
-      Server: 
-      - AmazonEC2
+      Date: 
+      - Tue, 28 Aug 2012 23:25:07 GMT
       Transfer-Encoding: 
       - chunked
-      Date: 
-      - Tue, 28 Aug 2012 22:36:45 GMT
       Content-Type: 
       - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
     body: 
       string: |-
         <?xml version="1.0" encoding="UTF-8"?>
         <DescribeSubnetsResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>c95921ad-17a4-4262-b877-2d357f6873f6</requestId>
+            <requestId>c0d2d063-8928-439c-a0cf-daabc07e7e5f</requestId>
             <subnetSet>
                 <item>
+                    <subnetId>subnet-6a9a2c01</subnetId>
+                    <state>available</state>
+                    <vpcId>vpc-979d2bfc</vpcId>
+                    <cidrBlock>172.16.3.0/24</cidrBlock>
+                    <availableIpAddressCount>251</availableIpAddressCount>
+                    <availabilityZone>us-east-1b</availabilityZone>
+                </item>
+                <item>
                     <subnetId>subnet-dd5bfcb6</subnetId>
                     <state>available</state>
                     <vpcId>vpc-0b40e760</vpcId>
@@ -95,9 +104,9 @@ http_interactions:
                     <availabilityZone>us-east-1a</availabilityZone>
                 </item>
                 <item>
-                    <subnetId>subnet-62952309</subnetId>
+                    <subnetId>subnet-a676c0cd</subnetId>
                     <state>available</state>
-                    <vpcId>vpc-6a952301</vpcId>
+                    <vpcId>vpc-a276c0c9</vpcId>
                     <cidrBlock>172.16.3.0/24</cidrBlock>
                     <availableIpAddressCount>251</availableIpAddressCount>
                     <availabilityZone>us-east-1b</availabilityZone>
@@ -105,5 +114,4 @@ http_interactions:
             </subnetSet>
         </DescribeSubnetsResponse>
     http_version: 
-  recorded_at: Tue, 28 Aug 2012 22:36:45 GMT
-recorded_with: VCR 2.2.4
+  recorded_at: Tue, 28 Aug 2012 23:25:08 GMT
diff --git a/server/tests/drivers/ec2/fixtures/test_0007_must_allow_creating_instance_in_a_VPC_subnet.yml b/server/tests/drivers/ec2/fixtures/test_0007_must_allow_creating_instance_in_a_VPC_subnet.yml
new file mode 100644
index 0000000..97ad021
--- /dev/null
+++ b/server/tests/drivers/ec2/fixtures/test_0007_must_allow_creating_instance_in_a_VPC_subnet.yml
@@ -0,0 +1,192 @@
+--- 
+recorded_with: VCR 2.2.4
+http_interactions: 
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=RunInstances&AddressingType=public&ImageId=ami-aecd60c7&InstanceType=m1.small&MaxCount=1&MinCount=1&Signature=8KuMolwNObUd9CL93vD9hi/dLwMOLpdUioRuVSbLnhg=&SignatureMethod=HmacSHA256&SignatureVersion=2&SubnetId=subnet-a676c0cd&Timestamp=2012-08-28T23:24:34.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Date: 
+      - Tue, 28 Aug 2012 23:24:35 GMT
+      Transfer-Encoding: 
+      - chunked
+      Content-Type: 
+      - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <RunInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>af525302-cdcb-47a5-b9bc-1d9b0743b46f</requestId>
+            <reservationId>r-39f4045e</reservationId>
+            <ownerId>122214243412</ownerId>
+            <groupSet/>
+            <instancesSet>
+                <item>
+                    <instanceId>i-9c8b63e6</instanceId>
+                    <imageId>ami-aecd60c7</imageId>
+                    <instanceState>
+                        <code>0</code>
+                        <name>pending</name>
+                    </instanceState>
+                    <privateDnsName/>
+                    <dnsName/>
+                    <reason/>
+                    <amiLaunchIndex>0</amiLaunchIndex>
+                    <productCodes/>
+                    <instanceType>m1.small</instanceType>
+                    <launchTime>2012-08-28T23:24:35.000Z</launchTime>
+                    <placement>
+                        <availabilityZone>us-east-1b</availabilityZone>
+                        <groupName/>
+                    </placement>
+                    <kernelId>aki-88aa75e1</kernelId>
+                    <monitoring>
+                        <state>disabled</state>
+                    </monitoring>
+                    <subnetId>subnet-a676c0cd</subnetId>
+                    <vpcId>vpc-a276c0c9</vpcId>
+                    <privateIpAddress>172.16.3.53</privateIpAddress>
+                    <stateReason>
+                        <code>pending</code>
+                        <message>pending</message>
+                    </stateReason>
+                    <architecture>x86_64</architecture>
+                    <rootDeviceType>ebs</rootDeviceType>
+                    <rootDeviceName>/dev/sda1</rootDeviceName>
+                    <blockDeviceMapping/>
+                    <virtualizationType>paravirtual</virtualizationType>
+                    <clientToken/>
+                </item>
+            </instancesSet>
+        </RunInstancesResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 23:24:35 GMT
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=TerminateInstances&InstanceId.1=i-9c8b63e6&Signature=MCDFU/zjM7SzZRsIsmn5pdrcb66dYcLsj8o4741mACU=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:24:36.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Date: 
+      - Tue, 28 Aug 2012 23:24:36 GMT
+      Transfer-Encoding: 
+      - chunked
+      Content-Type: 
+      - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <TerminateInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>76d82ca5-79ee-4e77-a7a7-f5d20d016228</requestId>
+            <instancesSet>
+                <item>
+                    <instanceId>i-9c8b63e6</instanceId>
+                    <currentState>
+                        <code>32</code>
+                        <name>shutting-down</name>
+                    </currentState>
+                    <previousState>
+                        <code>0</code>
+                        <name>pending</name>
+                    </previousState>
+                </item>
+            </instancesSet>
+        </TerminateInstancesResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 23:24:36 GMT
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DescribeInstances&InstanceId.1=i-9c8b63e6&Signature=Gj7jewLjorlJWC42TDAkXcG5AnX4AwrmmXHQicnzuK4=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:24:36.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Date: 
+      - Tue, 28 Aug 2012 23:24:37 GMT
+      Transfer-Encoding: 
+      - chunked
+      Content-Type: 
+      - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>0781fc7a-4676-4eb5-b619-932f99b1544f</requestId>
+            <reservationSet>
+                <item>
+                    <reservationId>r-39f4045e</reservationId>
+                    <ownerId>122214243412</ownerId>
+                    <groupSet/>
+                    <instancesSet>
+                        <item>
+                            <instanceId>i-9c8b63e6</instanceId>
+                            <imageId>ami-aecd60c7</imageId>
+                            <instanceState>
+                                <code>48</code>
+                                <name>terminated</name>
+                            </instanceState>
+                            <privateDnsName/>
+                            <dnsName/>
+                            <reason>User initiated (2012-08-28 23:24:36 GMT)</reason>
+                            <amiLaunchIndex>0</amiLaunchIndex>
+                            <productCodes/>
+                            <instanceType>m1.small</instanceType>
+                            <launchTime>2012-08-28T23:24:35.000Z</launchTime>
+                            <placement>
+                                <availabilityZone>us-east-1b</availabilityZone>
+                                <groupName/>
+                            </placement>
+                            <kernelId>aki-88aa75e1</kernelId>
+                            <monitoring>
+                                <state>disabled</state>
+                            </monitoring>
+                            <stateReason>
+                                <code>Client.UserInitiatedShutdown</code>
+                                <message>Client.UserInitiatedShutdown: User initiated shutdown</message>
+                            </stateReason>
+                            <architecture>x86_64</architecture>
+                            <rootDeviceType>ebs</rootDeviceType>
+                            <rootDeviceName>/dev/sda1</rootDeviceName>
+                            <blockDeviceMapping/>
+                            <virtualizationType>paravirtual</virtualizationType>
+                            <clientToken/>
+                        </item>
+                    </instancesSet>
+                </item>
+            </reservationSet>
+        </DescribeInstancesResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 23:24:37 GMT
diff --git a/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-10.yml b/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-10.yml
deleted file mode 100644
index c8f0776..0000000
--- a/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-10.yml
+++ /dev/null
@@ -1,76 +0,0 @@
---- 
-http_interactions: 
-- request: 
-    method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJYOQYLLOIWN5LQ3A&Action=DescribeInstances&InstanceId.1=i-7177920a&Signature=DHxm7p2CMHn5fzkybhIzC977iJ/i59rnLEIXVWdrTVE=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-07-30T11:05:00.000Z&Version=2010-08-31
-    body: 
-      string: ""
-    headers: 
-      User-Agent: 
-      - ""
-      Accept: 
-      - "*/*"
-  response: 
-    status: 
-      code: 200
-      message: OK
-    headers: 
-      Content-Type: 
-      - text/xml;charset=UTF-8
-      Server: 
-      - AmazonEC2
-      Transfer-Encoding: 
-      - chunked
-      Date: 
-      - Mon, 30 Jul 2012 11:07:18 GMT
-    body: 
-      string: |-
-        <?xml version="1.0" encoding="UTF-8"?>
-        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>5e2c9e6e-25f1-4874-8370-e3a4791d19b2</requestId>
-            <reservationSet>
-                <item>
-                    <reservationId>r-362c9d52</reservationId>
-                    <ownerId>293787749884</ownerId>
-                    <groupSet>
-                        <item>
-                            <groupId>default</groupId>
-                        </item>
-                    </groupSet>
-                    <instancesSet>
-                        <item>
-                            <instanceId>i-7177920a</instanceId>
-                            <imageId>ami-aecd60c7</imageId>
-                            <instanceState>
-                                <code>0</code>
-                                <name>pending</name>
-                            </instanceState>
-                            <privateDnsName/>
-                            <dnsName/>
-                            <reason/>
-                            <amiLaunchIndex>0</amiLaunchIndex>
-                            <productCodes/>
-                            <instanceType>t1.micro</instanceType>
-                            <launchTime>2012-07-30T11:07:18.000Z</launchTime>
-                            <placement>
-                                <availabilityZone>us-east-1a</availabilityZone>
-                                <groupName/>
-                            </placement>
-                            <kernelId>aki-88aa75e1</kernelId>
-                            <monitoring>
-                                <state>disabled</state>
-                            </monitoring>
-                            <architecture>x86_64</architecture>
-                            <rootDeviceType>ebs</rootDeviceType>
-                            <rootDeviceName>/dev/sda1</rootDeviceName>
-                            <blockDeviceMapping/>
-                            <virtualizationType>paravirtual</virtualizationType>
-                            <clientToken/>
-                        </item>
-                    </instancesSet>
-                </item>
-            </reservationSet>
-        </DescribeInstancesResponse>
-    http_version: 
-  recorded_at: Mon, 30 Jul 2012 11:05:00 GMT
-recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-7.yml b/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-7.yml
deleted file mode 100644
index 20af4ba..0000000
--- a/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-7.yml
+++ /dev/null
@@ -1,88 +0,0 @@
---- 
-http_interactions: 
-- request: 
-    method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJYOQYLLOIWN5LQ3A&Action=DescribeInstances&InstanceId.1=i-7177920a&Signature=DHxm7p2CMHn5fzkybhIzC977iJ/i59rnLEIXVWdrTVE=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-07-30T11:05:00.000Z&Version=2010-08-31
-    body: 
-      string: ""
-    headers: 
-      User-Agent: 
-      - ""
-      Accept: 
-      - "*/*"
-  response: 
-    status: 
-      code: 200
-      message: OK
-    headers: 
-      Content-Type: 
-      - text/xml;charset=UTF-8
-      Server: 
-      - AmazonEC2
-      Transfer-Encoding: 
-      - chunked
-      Date: 
-      - Mon, 30 Jul 2012 11:07:51 GMT
-    body: 
-      string: |-
-        <?xml version="1.0" encoding="UTF-8"?>
-        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>98f9d892-c605-4f89-b06f-5ff2841a3964</requestId>
-            <reservationSet>
-                <item>
-                    <reservationId>r-362c9d52</reservationId>
-                    <ownerId>293787749884</ownerId>
-                    <groupSet>
-                        <item>
-                            <groupId>default</groupId>
-                        </item>
-                    </groupSet>
-                    <instancesSet>
-                        <item>
-                            <instanceId>i-7177920a</instanceId>
-                            <imageId>ami-aecd60c7</imageId>
-                            <instanceState>
-                                <code>16</code>
-                                <name>running</name>
-                            </instanceState>
-                            <privateDnsName>domU-12-31-39-02-75-62.compute-1.internal</privateDnsName>
-                            <dnsName>ec2-23-20-114-135.compute-1.amazonaws.com</dnsName>
-                            <reason/>
-                            <amiLaunchIndex>0</amiLaunchIndex>
-                            <productCodes/>
-                            <instanceType>t1.micro</instanceType>
-                            <launchTime>2012-07-30T11:07:18.000Z</launchTime>
-                            <placement>
-                                <availabilityZone>us-east-1a</availabilityZone>
-                                <groupName/>
-                            </placement>
-                            <kernelId>aki-88aa75e1</kernelId>
-                            <monitoring>
-                                <state>disabled</state>
-                            </monitoring>
-                            <privateIpAddress>10.248.122.144</privateIpAddress>
-                            <ipAddress>23.20.114.135</ipAddress>
-                            <architecture>x86_64</architecture>
-                            <rootDeviceType>ebs</rootDeviceType>
-                            <rootDeviceName>/dev/sda1</rootDeviceName>
-                            <blockDeviceMapping>
-                                <item>
-                                    <deviceName>/dev/sda1</deviceName>
-                                    <ebs>
-                                        <volumeId>vol-ba6f60db</volumeId>
-                                        <status>attached</status>
-                                        <attachTime>2012-07-30T11:07:42.000Z</attachTime>
-                                        <deleteOnTermination>true</deleteOnTermination>
-                                    </ebs>
-                                </item>
-                            </blockDeviceMapping>
-                            <virtualizationType>paravirtual</virtualizationType>
-                            <clientToken/>
-                        </item>
-                    </instancesSet>
-                </item>
-            </reservationSet>
-        </DescribeInstancesResponse>
-    http_version: 
-  recorded_at: Mon, 30 Jul 2012 11:05:00 GMT
-recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-8.yml b/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-8.yml
deleted file mode 100644
index d199283..0000000
--- a/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-8.yml
+++ /dev/null
@@ -1,88 +0,0 @@
---- 
-http_interactions: 
-- request: 
-    method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJYOQYLLOIWN5LQ3A&Action=DescribeInstances&InstanceId.1=i-7177920a&Signature=DHxm7p2CMHn5fzkybhIzC977iJ/i59rnLEIXVWdrTVE=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-07-30T11:05:00.000Z&Version=2010-08-31
-    body: 
-      string: ""
-    headers: 
-      User-Agent: 
-      - ""
-      Accept: 
-      - "*/*"
-  response: 
-    status: 
-      code: 200
-      message: OK
-    headers: 
-      Content-Type: 
-      - text/xml;charset=UTF-8
-      Server: 
-      - AmazonEC2
-      Transfer-Encoding: 
-      - chunked
-      Date: 
-      - Mon, 30 Jul 2012 11:07:40 GMT
-    body: 
-      string: |-
-        <?xml version="1.0" encoding="UTF-8"?>
-        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>979b5d58-f354-45c4-9d83-24eedc45d653</requestId>
-            <reservationSet>
-                <item>
-                    <reservationId>r-362c9d52</reservationId>
-                    <ownerId>293787749884</ownerId>
-                    <groupSet>
-                        <item>
-                            <groupId>default</groupId>
-                        </item>
-                    </groupSet>
-                    <instancesSet>
-                        <item>
-                            <instanceId>i-7177920a</instanceId>
-                            <imageId>ami-aecd60c7</imageId>
-                            <instanceState>
-                                <code>0</code>
-                                <name>pending</name>
-                            </instanceState>
-                            <privateDnsName>domU-12-31-39-02-75-62.compute-1.internal</privateDnsName>
-                            <dnsName>ec2-23-20-114-135.compute-1.amazonaws.com</dnsName>
-                            <reason/>
-                            <amiLaunchIndex>0</amiLaunchIndex>
-                            <productCodes/>
-                            <instanceType>t1.micro</instanceType>
-                            <launchTime>2012-07-30T11:07:18.000Z</launchTime>
-                            <placement>
-                                <availabilityZone>us-east-1a</availabilityZone>
-                                <groupName/>
-                            </placement>
-                            <kernelId>aki-88aa75e1</kernelId>
-                            <monitoring>
-                                <state>disabled</state>
-                            </monitoring>
-                            <privateIpAddress>10.248.122.144</privateIpAddress>
-                            <ipAddress>23.20.114.135</ipAddress>
-                            <architecture>x86_64</architecture>
-                            <rootDeviceType>ebs</rootDeviceType>
-                            <rootDeviceName>/dev/sda1</rootDeviceName>
-                            <blockDeviceMapping>
-                                <item>
-                                    <deviceName>/dev/sda1</deviceName>
-                                    <ebs>
-                                        <volumeId>vol-ba6f60db</volumeId>
-                                        <status>attaching</status>
-                                        <attachTime>2012-07-30T11:07:24.000Z</attachTime>
-                                        <deleteOnTermination>true</deleteOnTermination>
-                                    </ebs>
-                                </item>
-                            </blockDeviceMapping>
-                            <virtualizationType>paravirtual</virtualizationType>
-                            <clientToken/>
-                        </item>
-                    </instancesSet>
-                </item>
-            </reservationSet>
-        </DescribeInstancesResponse>
-    http_version: 
-  recorded_at: Mon, 30 Jul 2012 11:05:00 GMT
-recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-9.yml b/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-9.yml
deleted file mode 100644
index b6f1760..0000000
--- a/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-9.yml
+++ /dev/null
@@ -1,88 +0,0 @@
---- 
-http_interactions: 
-- request: 
-    method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJYOQYLLOIWN5LQ3A&Action=DescribeInstances&InstanceId.1=i-7177920a&Signature=DHxm7p2CMHn5fzkybhIzC977iJ/i59rnLEIXVWdrTVE=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-07-30T11:05:00.000Z&Version=2010-08-31
-    body: 
-      string: ""
-    headers: 
-      User-Agent: 
-      - ""
-      Accept: 
-      - "*/*"
-  response: 
-    status: 
-      code: 200
-      message: OK
-    headers: 
-      Content-Type: 
-      - text/xml;charset=UTF-8
-      Server: 
-      - AmazonEC2
-      Transfer-Encoding: 
-      - chunked
-      Date: 
-      - Mon, 30 Jul 2012 11:07:29 GMT
-    body: 
-      string: |-
-        <?xml version="1.0" encoding="UTF-8"?>
-        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>c28d5a60-c784-4b86-976a-da4ad72f3b57</requestId>
-            <reservationSet>
-                <item>
-                    <reservationId>r-362c9d52</reservationId>
-                    <ownerId>293787749884</ownerId>
-                    <groupSet>
-                        <item>
-                            <groupId>default</groupId>
-                        </item>
-                    </groupSet>
-                    <instancesSet>
-                        <item>
-                            <instanceId>i-7177920a</instanceId>
-                            <imageId>ami-aecd60c7</imageId>
-                            <instanceState>
-                                <code>0</code>
-                                <name>pending</name>
-                            </instanceState>
-                            <privateDnsName>domU-12-31-39-02-75-62.compute-1.internal</privateDnsName>
-                            <dnsName>ec2-23-20-114-135.compute-1.amazonaws.com</dnsName>
-                            <reason/>
-                            <amiLaunchIndex>0</amiLaunchIndex>
-                            <productCodes/>
-                            <instanceType>t1.micro</instanceType>
-                            <launchTime>2012-07-30T11:07:18.000Z</launchTime>
-                            <placement>
-                                <availabilityZone>us-east-1a</availabilityZone>
-                                <groupName/>
-                            </placement>
-                            <kernelId>aki-88aa75e1</kernelId>
-                            <monitoring>
-                                <state>disabled</state>
-                            </monitoring>
-                            <privateIpAddress>10.248.122.144</privateIpAddress>
-                            <ipAddress>23.20.114.135</ipAddress>
-                            <architecture>x86_64</architecture>
-                            <rootDeviceType>ebs</rootDeviceType>
-                            <rootDeviceName>/dev/sda1</rootDeviceName>
-                            <blockDeviceMapping>
-                                <item>
-                                    <deviceName>/dev/sda1</deviceName>
-                                    <ebs>
-                                        <volumeId>vol-ba6f60db</volumeId>
-                                        <status>attaching</status>
-                                        <attachTime>2012-07-30T11:07:24.000Z</attachTime>
-                                        <deleteOnTermination>true</deleteOnTermination>
-                                    </ebs>
-                                </item>
-                            </blockDeviceMapping>
-                            <virtualizationType>paravirtual</virtualizationType>
-                            <clientToken/>
-                        </item>
-                    </instancesSet>
-                </item>
-            </reservationSet>
-        </DescribeInstancesResponse>
-    http_version: 
-  recorded_at: Mon, 30 Jul 2012 11:05:00 GMT
-recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-stopped-10.yml b/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-stopped-10.yml
deleted file mode 100644
index 668cb51..0000000
--- a/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state-stopped-10.yml
+++ /dev/null
@@ -1,92 +0,0 @@
---- 
-http_interactions: 
-- request: 
-    method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJYOQYLLOIWN5LQ3A&Action=DescribeInstances&InstanceId.1=i-7177920a&Signature=DHxm7p2CMHn5fzkybhIzC977iJ/i59rnLEIXVWdrTVE=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-07-30T11:05:00.000Z&Version=2010-08-31
-    body: 
-      string: ""
-    headers: 
-      User-Agent: 
-      - ""
-      Accept: 
-      - "*/*"
-  response: 
-    status: 
-      code: 200
-      message: OK
-    headers: 
-      Content-Type: 
-      - text/xml;charset=UTF-8
-      Server: 
-      - AmazonEC2
-      Transfer-Encoding: 
-      - chunked
-      Date: 
-      - Mon, 30 Jul 2012 11:07:55 GMT
-    body: 
-      string: |-
-        <?xml version="1.0" encoding="UTF-8"?>
-        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>88fa32f8-44ac-4fc7-b796-6d962c59a72e</requestId>
-            <reservationSet>
-                <item>
-                    <reservationId>r-362c9d52</reservationId>
-                    <ownerId>293787749884</ownerId>
-                    <groupSet>
-                        <item>
-                            <groupId>default</groupId>
-                        </item>
-                    </groupSet>
-                    <instancesSet>
-                        <item>
-                            <instanceId>i-7177920a</instanceId>
-                            <imageId>ami-aecd60c7</imageId>
-                            <instanceState>
-                                <code>32</code>
-                                <name>shutting-down</name>
-                            </instanceState>
-                            <privateDnsName>domU-12-31-39-02-75-62.compute-1.internal</privateDnsName>
-                            <dnsName>ec2-23-20-114-135.compute-1.amazonaws.com</dnsName>
-                            <reason>User initiated (2012-07-30 11:07:54 GMT)</reason>
-                            <amiLaunchIndex>0</amiLaunchIndex>
-                            <productCodes/>
-                            <instanceType>t1.micro</instanceType>
-                            <launchTime>2012-07-30T11:07:18.000Z</launchTime>
-                            <placement>
-                                <availabilityZone>us-east-1a</availabilityZone>
-                                <groupName/>
-                            </placement>
-                            <kernelId>aki-88aa75e1</kernelId>
-                            <monitoring>
-                                <state>disabled</state>
-                            </monitoring>
-                            <privateIpAddress>10.248.122.144</privateIpAddress>
-                            <ipAddress>23.20.114.135</ipAddress>
-                            <stateReason>
-                                <code>Client.UserInitiatedShutdown</code>
-                                <message>Client.UserInitiatedShutdown: User initiated shutdown</message>
-                            </stateReason>
-                            <architecture>x86_64</architecture>
-                            <rootDeviceType>ebs</rootDeviceType>
-                            <rootDeviceName>/dev/sda1</rootDeviceName>
-                            <blockDeviceMapping>
-                                <item>
-                                    <deviceName>/dev/sda1</deviceName>
-                                    <ebs>
-                                        <volumeId>vol-ba6f60db</volumeId>
-                                        <status>attached</status>
-                                        <attachTime>2012-07-30T11:07:42.000Z</attachTime>
-                                        <deleteOnTermination>true</deleteOnTermination>
-                                    </ebs>
-                                </item>
-                            </blockDeviceMapping>
-                            <virtualizationType>paravirtual</virtualizationType>
-                            <clientToken/>
-                        </item>
-                    </instancesSet>
-                </item>
-            </reservationSet>
-        </DescribeInstancesResponse>
-    http_version: 
-  recorded_at: Mon, 30 Jul 2012 11:05:00 GMT
-recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state.yml b/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state.yml
deleted file mode 100644
index 2bbb880..0000000
--- a/server/tests/drivers/ec2/fixtures/test_0007_must_allow_to_reboot_instance_in_running_state.yml
+++ /dev/null
@@ -1,411 +0,0 @@
---- 
-http_interactions: 
-- request: 
-    method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJYOQYLLOIWN5LQ3A&Action=RunInstances&AddressingType=public&ImageId=ami-aecd60c7&InstanceType=t1.micro&MaxCount=1&MinCount=1&Placement.AvailabilityZone=us-east-1a&Signature=5QeyXEroD8vgxShp1x92wRRrNzaPgEg4ZK59eoUX9kU=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-07-30T11:05:00.000Z&Version=2010-08-31
-    body: 
-      string: ""
-    headers: 
-      User-Agent: 
-      - ""
-      Accept: 
-      - "*/*"
-  response: 
-    status: 
-      code: 200
-      message: OK
-    headers: 
-      Content-Type: 
-      - text/xml;charset=UTF-8
-      Server: 
-      - AmazonEC2
-      Transfer-Encoding: 
-      - chunked
-      Date: 
-      - Mon, 30 Jul 2012 11:07:18 GMT
-    body: 
-      string: |-
-        <?xml version="1.0" encoding="UTF-8"?>
-        <RunInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>cf80633e-256f-470a-a83d-88abb5c1560b</requestId>
-            <reservationId>r-362c9d52</reservationId>
-            <ownerId>293787749884</ownerId>
-            <groupSet>
-                <item>
-                    <groupId>default</groupId>
-                </item>
-            </groupSet>
-            <instancesSet>
-                <item>
-                    <instanceId>i-7177920a</instanceId>
-                    <imageId>ami-aecd60c7</imageId>
-                    <instanceState>
-                        <code>0</code>
-                        <name>pending</name>
-                    </instanceState>
-                    <privateDnsName/>
-                    <dnsName/>
-                    <reason/>
-                    <amiLaunchIndex>0</amiLaunchIndex>
-                    <productCodes/>
-                    <instanceType>t1.micro</instanceType>
-                    <launchTime>2012-07-30T11:07:18.000Z</launchTime>
-                    <placement>
-                        <availabilityZone>us-east-1a</availabilityZone>
-                        <groupName/>
-                    </placement>
-                    <kernelId>aki-88aa75e1</kernelId>
-                    <monitoring>
-                        <state>disabled</state>
-                    </monitoring>
-                    <stateReason>
-                        <code>pending</code>
-                        <message>pending</message>
-                    </stateReason>
-                    <architecture>x86_64</architecture>
-                    <rootDeviceType>ebs</rootDeviceType>
-                    <rootDeviceName>/dev/sda1</rootDeviceName>
-                    <blockDeviceMapping/>
-                    <virtualizationType>paravirtual</virtualizationType>
-                    <clientToken/>
-                </item>
-            </instancesSet>
-        </RunInstancesResponse>
-    http_version: 
-  recorded_at: Mon, 30 Jul 2012 11:05:00 GMT
-- request: 
-    method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJYOQYLLOIWN5LQ3A&Action=RebootInstances&InstanceId.1=i-7177920a&Signature=MHKArgLDFZXKcn5R94a0OKfRSglhuh7nQVGDCHne7bo=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-07-30T11:05:00.000Z&Version=2010-08-31
-    body: 
-      string: ""
-    headers: 
-      User-Agent: 
-      - ""
-      Accept: 
-      - "*/*"
-  response: 
-    status: 
-      code: 200
-      message: OK
-    headers: 
-      Content-Type: 
-      - text/xml;charset=UTF-8
-      Server: 
-      - AmazonEC2
-      Transfer-Encoding: 
-      - chunked
-      Date: 
-      - Mon, 30 Jul 2012 11:07:52 GMT
-    body: 
-      string: |-
-        <?xml version="1.0" encoding="UTF-8"?>
-        <RebootInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>dac6168f-fbdc-4deb-9eae-5a2b115acaaa</requestId>
-            <return>true</return>
-        </RebootInstancesResponse>
-    http_version: 
-  recorded_at: Mon, 30 Jul 2012 11:05:00 GMT
-- request: 
-    method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJYOQYLLOIWN5LQ3A&Action=DescribeInstances&InstanceId.1=i-7177920a&Signature=DHxm7p2CMHn5fzkybhIzC977iJ/i59rnLEIXVWdrTVE=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-07-30T11:05:00.000Z&Version=2010-08-31
-    body: 
-      string: ""
-    headers: 
-      User-Agent: 
-      - ""
-      Accept: 
-      - "*/*"
-  response: 
-    status: 
-      code: 200
-      message: OK
-    headers: 
-      Content-Type: 
-      - text/xml;charset=UTF-8
-      Server: 
-      - AmazonEC2
-      Transfer-Encoding: 
-      - chunked
-      Date: 
-      - Mon, 30 Jul 2012 11:07:53 GMT
-    body: 
-      string: |-
-        <?xml version="1.0" encoding="UTF-8"?>
-        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>61ad04de-03cc-43c1-b9b0-dac06751e2b7</requestId>
-            <reservationSet>
-                <item>
-                    <reservationId>r-362c9d52</reservationId>
-                    <ownerId>293787749884</ownerId>
-                    <groupSet>
-                        <item>
-                            <groupId>default</groupId>
-                        </item>
-                    </groupSet>
-                    <instancesSet>
-                        <item>
-                            <instanceId>i-7177920a</instanceId>
-                            <imageId>ami-aecd60c7</imageId>
-                            <instanceState>
-                                <code>16</code>
-                                <name>running</name>
-                            </instanceState>
-                            <privateDnsName>domU-12-31-39-02-75-62.compute-1.internal</privateDnsName>
-                            <dnsName>ec2-23-20-114-135.compute-1.amazonaws.com</dnsName>
-                            <reason/>
-                            <amiLaunchIndex>0</amiLaunchIndex>
-                            <productCodes/>
-                            <instanceType>t1.micro</instanceType>
-                            <launchTime>2012-07-30T11:07:18.000Z</launchTime>
-                            <placement>
-                                <availabilityZone>us-east-1a</availabilityZone>
-                                <groupName/>
-                            </placement>
-                            <kernelId>aki-88aa75e1</kernelId>
-                            <monitoring>
-                                <state>disabled</state>
-                            </monitoring>
-                            <privateIpAddress>10.248.122.144</privateIpAddress>
-                            <ipAddress>23.20.114.135</ipAddress>
-                            <architecture>x86_64</architecture>
-                            <rootDeviceType>ebs</rootDeviceType>
-                            <rootDeviceName>/dev/sda1</rootDeviceName>
-                            <blockDeviceMapping>
-                                <item>
-                                    <deviceName>/dev/sda1</deviceName>
-                                    <ebs>
-                                        <volumeId>vol-ba6f60db</volumeId>
-                                        <status>attached</status>
-                                        <attachTime>2012-07-30T11:07:42.000Z</attachTime>
-                                        <deleteOnTermination>true</deleteOnTermination>
-                                    </ebs>
-                                </item>
-                            </blockDeviceMapping>
-                            <virtualizationType>paravirtual</virtualizationType>
-                            <clientToken/>
-                        </item>
-                    </instancesSet>
-                </item>
-            </reservationSet>
-        </DescribeInstancesResponse>
-    http_version: 
-  recorded_at: Mon, 30 Jul 2012 11:05:00 GMT
-- request: 
-    method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJYOQYLLOIWN5LQ3A&Action=DescribeInstances&InstanceId.1=i-7177920a&Signature=DHxm7p2CMHn5fzkybhIzC977iJ/i59rnLEIXVWdrTVE=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-07-30T11:05:00.000Z&Version=2010-08-31
-    body: 
-      string: ""
-    headers: 
-      User-Agent: 
-      - ""
-      Accept: 
-      - "*/*"
-  response: 
-    status: 
-      code: 200
-      message: OK
-    headers: 
-      Content-Type: 
-      - text/xml;charset=UTF-8
-      Server: 
-      - AmazonEC2
-      Transfer-Encoding: 
-      - chunked
-      Date: 
-      - Mon, 30 Jul 2012 11:07:53 GMT
-    body: 
-      string: |-
-        <?xml version="1.0" encoding="UTF-8"?>
-        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>ee6ecedd-45e9-4d42-9168-391a87e556f0</requestId>
-            <reservationSet>
-                <item>
-                    <reservationId>r-362c9d52</reservationId>
-                    <ownerId>293787749884</ownerId>
-                    <groupSet>
-                        <item>
-                            <groupId>default</groupId>
-                        </item>
-                    </groupSet>
-                    <instancesSet>
-                        <item>
-                            <instanceId>i-7177920a</instanceId>
-                            <imageId>ami-aecd60c7</imageId>
-                            <instanceState>
-                                <code>16</code>
-                                <name>running</name>
-                            </instanceState>
-                            <privateDnsName>domU-12-31-39-02-75-62.compute-1.internal</privateDnsName>
-                            <dnsName>ec2-23-20-114-135.compute-1.amazonaws.com</dnsName>
-                            <reason/>
-                            <amiLaunchIndex>0</amiLaunchIndex>
-                            <productCodes/>
-                            <instanceType>t1.micro</instanceType>
-                            <launchTime>2012-07-30T11:07:18.000Z</launchTime>
-                            <placement>
-                                <availabilityZone>us-east-1a</availabilityZone>
-                                <groupName/>
-                            </placement>
-                            <kernelId>aki-88aa75e1</kernelId>
-                            <monitoring>
-                                <state>disabled</state>
-                            </monitoring>
-                            <privateIpAddress>10.248.122.144</privateIpAddress>
-                            <ipAddress>23.20.114.135</ipAddress>
-                            <architecture>x86_64</architecture>
-                            <rootDeviceType>ebs</rootDeviceType>
-                            <rootDeviceName>/dev/sda1</rootDeviceName>
-                            <blockDeviceMapping>
-                                <item>
-                                    <deviceName>/dev/sda1</deviceName>
-                                    <ebs>
-                                        <volumeId>vol-ba6f60db</volumeId>
-                                        <status>attached</status>
-                                        <attachTime>2012-07-30T11:07:42.000Z</attachTime>
-                                        <deleteOnTermination>true</deleteOnTermination>
-                                    </ebs>
-                                </item>
-                            </blockDeviceMapping>
-                            <virtualizationType>paravirtual</virtualizationType>
-                            <clientToken/>
-                        </item>
-                    </instancesSet>
-                </item>
-            </reservationSet>
-        </DescribeInstancesResponse>
-    http_version: 
-  recorded_at: Mon, 30 Jul 2012 11:05:00 GMT
-- request: 
-    method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJYOQYLLOIWN5LQ3A&Action=TerminateInstances&InstanceId.1=i-7177920a&Signature=nGpU/fD4fCQiwW7gRirEQ4ZlzZ/Fdo7Wl9g0IGT1oLI=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-07-30T11:05:00.000Z&Version=2010-08-31
-    body: 
-      string: ""
-    headers: 
-      User-Agent: 
-      - ""
-      Accept: 
-      - "*/*"
-  response: 
-    status: 
-      code: 200
-      message: OK
-    headers: 
-      Content-Type: 
-      - text/xml;charset=UTF-8
-      Server: 
-      - AmazonEC2
-      Transfer-Encoding: 
-      - chunked
-      Date: 
-      - Mon, 30 Jul 2012 11:07:54 GMT
-    body: 
-      string: |-
-        <?xml version="1.0" encoding="UTF-8"?>
-        <TerminateInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>7e42a612-937d-43e4-8750-eac942ccfe5d</requestId>
-            <instancesSet>
-                <item>
-                    <instanceId>i-7177920a</instanceId>
-                    <currentState>
-                        <code>32</code>
-                        <name>shutting-down</name>
-                    </currentState>
-                    <previousState>
-                        <code>16</code>
-                        <name>running</name>
-                    </previousState>
-                </item>
-            </instancesSet>
-        </TerminateInstancesResponse>
-    http_version: 
-  recorded_at: Mon, 30 Jul 2012 11:05:00 GMT
-- request: 
-    method: get
-    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJYOQYLLOIWN5LQ3A&Action=DescribeInstances&InstanceId.1=i-7177920a&Signature=DHxm7p2CMHn5fzkybhIzC977iJ/i59rnLEIXVWdrTVE=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-07-30T11:05:00.000Z&Version=2010-08-31
-    body: 
-      string: ""
-    headers: 
-      User-Agent: 
-      - ""
-      Accept: 
-      - "*/*"
-  response: 
-    status: 
-      code: 200
-      message: OK
-    headers: 
-      Content-Type: 
-      - text/xml;charset=UTF-8
-      Server: 
-      - AmazonEC2
-      Transfer-Encoding: 
-      - chunked
-      Date: 
-      - Mon, 30 Jul 2012 11:07:54 GMT
-    body: 
-      string: |-
-        <?xml version="1.0" encoding="UTF-8"?>
-        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
-            <requestId>dacf4f94-b784-49c7-93c2-95e8b6b69aa4</requestId>
-            <reservationSet>
-                <item>
-                    <reservationId>r-362c9d52</reservationId>
-                    <ownerId>293787749884</ownerId>
-                    <groupSet>
-                        <item>
-                            <groupId>default</groupId>
-                        </item>
-                    </groupSet>
-                    <instancesSet>
-                        <item>
-                            <instanceId>i-7177920a</instanceId>
-                            <imageId>ami-aecd60c7</imageId>
-                            <instanceState>
-                                <code>32</code>
-                                <name>shutting-down</name>
-                            </instanceState>
-                            <privateDnsName>domU-12-31-39-02-75-62.compute-1.internal</privateDnsName>
-                            <dnsName>ec2-23-20-114-135.compute-1.amazonaws.com</dnsName>
-                            <reason>User initiated (2012-07-30 11:07:54 GMT)</reason>
-                            <amiLaunchIndex>0</amiLaunchIndex>
-                            <productCodes/>
-                            <instanceType>t1.micro</instanceType>
-                            <launchTime>2012-07-30T11:07:18.000Z</launchTime>
-                            <placement>
-                                <availabilityZone>us-east-1a</availabilityZone>
-                                <groupName/>
-                            </placement>
-                            <kernelId>aki-88aa75e1</kernelId>
-                            <monitoring>
-                                <state>disabled</state>
-                            </monitoring>
-                            <privateIpAddress>10.248.122.144</privateIpAddress>
-                            <ipAddress>23.20.114.135</ipAddress>
-                            <stateReason>
-                                <code>Client.UserInitiatedShutdown</code>
-                                <message>Client.UserInitiatedShutdown: User initiated shutdown</message>
-                            </stateReason>
-                            <architecture>x86_64</architecture>
-                            <rootDeviceType>ebs</rootDeviceType>
-                            <rootDeviceName>/dev/sda1</rootDeviceName>
-                            <blockDeviceMapping>
-                                <item>
-                                    <deviceName>/dev/sda1</deviceName>
-                                    <ebs>
-                                        <volumeId>vol-ba6f60db</volumeId>
-                                        <status>attached</status>
-                                        <attachTime>2012-07-30T11:07:42.000Z</attachTime>
-                                        <deleteOnTermination>true</deleteOnTermination>
-                                    </ebs>
-                                </item>
-                            </blockDeviceMapping>
-                            <virtualizationType>paravirtual</virtualizationType>
-                            <clientToken/>
-                        </item>
-                    </instancesSet>
-                </item>
-            </reservationSet>
-        </DescribeInstancesResponse>
-    http_version: 
-  recorded_at: Mon, 30 Jul 2012 11:05:00 GMT
-recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state-10.yml b/server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state-10.yml
new file mode 100644
index 0000000..0769203
--- /dev/null
+++ b/server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state-10.yml
@@ -0,0 +1,76 @@
+--- 
+recorded_with: VCR 2.2.4
+http_interactions: 
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DescribeInstances&InstanceId.1=i-768c640c&Signature=shomJVeFPrz90AAOdMTk8Zb+9bZy7WUxKgoQWf4KSLs=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:24:40.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Date: 
+      - Tue, 28 Aug 2012 23:24:40 GMT
+      Transfer-Encoding: 
+      - chunked
+      Content-Type: 
+      - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>2be56170-2b04-499f-a9be-3e21de9f2a26</requestId>
+            <reservationSet>
+                <item>
+                    <reservationId>r-1ff40478</reservationId>
+                    <ownerId>122214243412</ownerId>
+                    <groupSet>
+                        <item>
+                            <groupId>default</groupId>
+                        </item>
+                    </groupSet>
+                    <instancesSet>
+                        <item>
+                            <instanceId>i-768c640c</instanceId>
+                            <imageId>ami-aecd60c7</imageId>
+                            <instanceState>
+                                <code>0</code>
+                                <name>pending</name>
+                            </instanceState>
+                            <privateDnsName/>
+                            <dnsName/>
+                            <reason/>
+                            <amiLaunchIndex>0</amiLaunchIndex>
+                            <productCodes/>
+                            <instanceType>t1.micro</instanceType>
+                            <launchTime>2012-08-28T23:24:39.000Z</launchTime>
+                            <placement>
+                                <availabilityZone>us-east-1a</availabilityZone>
+                                <groupName/>
+                            </placement>
+                            <kernelId>aki-88aa75e1</kernelId>
+                            <monitoring>
+                                <state>disabled</state>
+                            </monitoring>
+                            <architecture>x86_64</architecture>
+                            <rootDeviceType>ebs</rootDeviceType>
+                            <rootDeviceName>/dev/sda1</rootDeviceName>
+                            <blockDeviceMapping/>
+                            <virtualizationType>paravirtual</virtualizationType>
+                            <clientToken/>
+                        </item>
+                    </instancesSet>
+                </item>
+            </reservationSet>
+        </DescribeInstancesResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 23:24:40 GMT
diff --git a/server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state-8.yml b/server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state-8.yml
new file mode 100644
index 0000000..e8922c1
--- /dev/null
+++ b/server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state-8.yml
@@ -0,0 +1,88 @@
+--- 
+recorded_with: VCR 2.2.4
+http_interactions: 
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DescribeInstances&InstanceId.1=i-768c640c&Signature=FWu1FLJ8Rx57569ZJEcQrj+wbU8mQ/NBiE7fYTWr290=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:25:01.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Date: 
+      - Tue, 28 Aug 2012 23:25:01 GMT
+      Transfer-Encoding: 
+      - chunked
+      Content-Type: 
+      - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>e1f6400b-c8ca-40a2-bb45-fe13b42dd0ce</requestId>
+            <reservationSet>
+                <item>
+                    <reservationId>r-1ff40478</reservationId>
+                    <ownerId>122214243412</ownerId>
+                    <groupSet>
+                        <item>
+                            <groupId>default</groupId>
+                        </item>
+                    </groupSet>
+                    <instancesSet>
+                        <item>
+                            <instanceId>i-768c640c</instanceId>
+                            <imageId>ami-aecd60c7</imageId>
+                            <instanceState>
+                                <code>16</code>
+                                <name>running</name>
+                            </instanceState>
+                            <privateDnsName>domU-12-31-39-03-CA-6E.compute-1.internal</privateDnsName>
+                            <dnsName>ec2-23-22-221-103.compute-1.amazonaws.com</dnsName>
+                            <reason/>
+                            <amiLaunchIndex>0</amiLaunchIndex>
+                            <productCodes/>
+                            <instanceType>t1.micro</instanceType>
+                            <launchTime>2012-08-28T23:24:39.000Z</launchTime>
+                            <placement>
+                                <availabilityZone>us-east-1a</availabilityZone>
+                                <groupName/>
+                            </placement>
+                            <kernelId>aki-88aa75e1</kernelId>
+                            <monitoring>
+                                <state>disabled</state>
+                            </monitoring>
+                            <privateIpAddress>10.249.201.152</privateIpAddress>
+                            <ipAddress>23.22.221.103</ipAddress>
+                            <architecture>x86_64</architecture>
+                            <rootDeviceType>ebs</rootDeviceType>
+                            <rootDeviceName>/dev/sda1</rootDeviceName>
+                            <blockDeviceMapping>
+                                <item>
+                                    <deviceName>/dev/sda1</deviceName>
+                                    <ebs>
+                                        <volumeId>vol-75aa0f0e</volumeId>
+                                        <status>attached</status>
+                                        <attachTime>2012-08-28T23:25:01.000Z</attachTime>
+                                        <deleteOnTermination>true</deleteOnTermination>
+                                    </ebs>
+                                </item>
+                            </blockDeviceMapping>
+                            <virtualizationType>paravirtual</virtualizationType>
+                            <clientToken/>
+                        </item>
+                    </instancesSet>
+                </item>
+            </reservationSet>
+        </DescribeInstancesResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 23:25:02 GMT
diff --git a/server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state-9.yml b/server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state-9.yml
new file mode 100644
index 0000000..5f1043b
--- /dev/null
+++ b/server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state-9.yml
@@ -0,0 +1,76 @@
+--- 
+recorded_with: VCR 2.2.4
+http_interactions: 
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DescribeInstances&InstanceId.1=i-768c640c&Signature=eDq/2+kVeLxeyHSksc7JDVsk9XUHplUeLHvpXQPUfp4=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:24:50.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Date: 
+      - Tue, 28 Aug 2012 23:24:50 GMT
+      Transfer-Encoding: 
+      - chunked
+      Content-Type: 
+      - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>fcfdf0b8-f53a-48f0-996d-b065d21b5ff3</requestId>
+            <reservationSet>
+                <item>
+                    <reservationId>r-1ff40478</reservationId>
+                    <ownerId>122214243412</ownerId>
+                    <groupSet>
+                        <item>
+                            <groupId>default</groupId>
+                        </item>
+                    </groupSet>
+                    <instancesSet>
+                        <item>
+                            <instanceId>i-768c640c</instanceId>
+                            <imageId>ami-aecd60c7</imageId>
+                            <instanceState>
+                                <code>0</code>
+                                <name>pending</name>
+                            </instanceState>
+                            <privateDnsName/>
+                            <dnsName/>
+                            <reason/>
+                            <amiLaunchIndex>0</amiLaunchIndex>
+                            <productCodes/>
+                            <instanceType>t1.micro</instanceType>
+                            <launchTime>2012-08-28T23:24:39.000Z</launchTime>
+                            <placement>
+                                <availabilityZone>us-east-1a</availabilityZone>
+                                <groupName/>
+                            </placement>
+                            <kernelId>aki-88aa75e1</kernelId>
+                            <monitoring>
+                                <state>disabled</state>
+                            </monitoring>
+                            <architecture>x86_64</architecture>
+                            <rootDeviceType>ebs</rootDeviceType>
+                            <rootDeviceName>/dev/sda1</rootDeviceName>
+                            <blockDeviceMapping/>
+                            <virtualizationType>paravirtual</virtualizationType>
+                            <clientToken/>
+                        </item>
+                    </instancesSet>
+                </item>
+            </reservationSet>
+        </DescribeInstancesResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 23:24:51 GMT
diff --git a/server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state-stopped-10.yml b/server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state-stopped-10.yml
new file mode 100644
index 0000000..fae02c7
--- /dev/null
+++ b/server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state-stopped-10.yml
@@ -0,0 +1,92 @@
+--- 
+recorded_with: VCR 2.2.4
+http_interactions: 
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DescribeInstances&InstanceId.1=i-768c640c&Signature=CaDNHQcCS+m5OWCZLgeRwOa7xGt69trAaPuN8L1/6AM=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:25:05.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Date: 
+      - Tue, 28 Aug 2012 23:25:05 GMT
+      Transfer-Encoding: 
+      - chunked
+      Content-Type: 
+      - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>bdfd429f-e248-4106-8bae-4300893775b2</requestId>
+            <reservationSet>
+                <item>
+                    <reservationId>r-1ff40478</reservationId>
+                    <ownerId>122214243412</ownerId>
+                    <groupSet>
+                        <item>
+                            <groupId>default</groupId>
+                        </item>
+                    </groupSet>
+                    <instancesSet>
+                        <item>
+                            <instanceId>i-768c640c</instanceId>
+                            <imageId>ami-aecd60c7</imageId>
+                            <instanceState>
+                                <code>32</code>
+                                <name>shutting-down</name>
+                            </instanceState>
+                            <privateDnsName>domU-12-31-39-03-CA-6E.compute-1.internal</privateDnsName>
+                            <dnsName>ec2-23-22-221-103.compute-1.amazonaws.com</dnsName>
+                            <reason>User initiated (2012-08-28 23:25:04 GMT)</reason>
+                            <amiLaunchIndex>0</amiLaunchIndex>
+                            <productCodes/>
+                            <instanceType>t1.micro</instanceType>
+                            <launchTime>2012-08-28T23:24:39.000Z</launchTime>
+                            <placement>
+                                <availabilityZone>us-east-1a</availabilityZone>
+                                <groupName/>
+                            </placement>
+                            <kernelId>aki-88aa75e1</kernelId>
+                            <monitoring>
+                                <state>disabled</state>
+                            </monitoring>
+                            <privateIpAddress>10.249.201.152</privateIpAddress>
+                            <ipAddress>23.22.221.103</ipAddress>
+                            <stateReason>
+                                <code>Client.UserInitiatedShutdown</code>
+                                <message>Client.UserInitiatedShutdown: User initiated shutdown</message>
+                            </stateReason>
+                            <architecture>x86_64</architecture>
+                            <rootDeviceType>ebs</rootDeviceType>
+                            <rootDeviceName>/dev/sda1</rootDeviceName>
+                            <blockDeviceMapping>
+                                <item>
+                                    <deviceName>/dev/sda1</deviceName>
+                                    <ebs>
+                                        <volumeId>vol-75aa0f0e</volumeId>
+                                        <status>attached</status>
+                                        <attachTime>2012-08-28T23:25:01.000Z</attachTime>
+                                        <deleteOnTermination>true</deleteOnTermination>
+                                    </ebs>
+                                </item>
+                            </blockDeviceMapping>
+                            <virtualizationType>paravirtual</virtualizationType>
+                            <clientToken/>
+                        </item>
+                    </instancesSet>
+                </item>
+            </reservationSet>
+        </DescribeInstancesResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 23:25:05 GMT
diff --git a/server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state.yml b/server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state.yml
new file mode 100644
index 0000000..e30571b
--- /dev/null
+++ b/server/tests/drivers/ec2/fixtures/test_0008_must_allow_to_reboot_instance_in_running_state.yml
@@ -0,0 +1,411 @@
+--- 
+recorded_with: VCR 2.2.4
+http_interactions: 
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=RunInstances&AddressingType=public&ImageId=ami-aecd60c7&InstanceType=t1.micro&MaxCount=1&MinCount=1&Placement.AvailabilityZone=us-east-1a&Signature=7TAagHYZvKkM2voACsypZzEVxTRT2pqPougPiTKaePw=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:24:39.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Date: 
+      - Tue, 28 Aug 2012 23:24:39 GMT
+      Transfer-Encoding: 
+      - chunked
+      Content-Type: 
+      - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <RunInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>945c368c-8dd3-42c8-8923-b3ced28e763e</requestId>
+            <reservationId>r-1ff40478</reservationId>
+            <ownerId>122214243412</ownerId>
+            <groupSet>
+                <item>
+                    <groupId>default</groupId>
+                </item>
+            </groupSet>
+            <instancesSet>
+                <item>
+                    <instanceId>i-768c640c</instanceId>
+                    <imageId>ami-aecd60c7</imageId>
+                    <instanceState>
+                        <code>0</code>
+                        <name>pending</name>
+                    </instanceState>
+                    <privateDnsName/>
+                    <dnsName/>
+                    <reason/>
+                    <amiLaunchIndex>0</amiLaunchIndex>
+                    <productCodes/>
+                    <instanceType>t1.micro</instanceType>
+                    <launchTime>2012-08-28T23:24:39.000Z</launchTime>
+                    <placement>
+                        <availabilityZone>us-east-1a</availabilityZone>
+                        <groupName/>
+                    </placement>
+                    <kernelId>aki-88aa75e1</kernelId>
+                    <monitoring>
+                        <state>disabled</state>
+                    </monitoring>
+                    <stateReason>
+                        <code>pending</code>
+                        <message>pending</message>
+                    </stateReason>
+                    <architecture>x86_64</architecture>
+                    <rootDeviceType>ebs</rootDeviceType>
+                    <rootDeviceName>/dev/sda1</rootDeviceName>
+                    <blockDeviceMapping/>
+                    <virtualizationType>paravirtual</virtualizationType>
+                    <clientToken/>
+                </item>
+            </instancesSet>
+        </RunInstancesResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 23:24:40 GMT
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=RebootInstances&InstanceId.1=i-768c640c&Signature=i2hVf4DeZwGGOvnnOT3znwTn7XZTnjWhfb1Q3sEGbgs=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:25:02.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Date: 
+      - Tue, 28 Aug 2012 23:25:02 GMT
+      Transfer-Encoding: 
+      - chunked
+      Content-Type: 
+      - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <RebootInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>630ce453-2d41-4c0d-ab27-140db812d4b1</requestId>
+            <return>true</return>
+        </RebootInstancesResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 23:25:02 GMT
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DescribeInstances&InstanceId.1=i-768c640c&Signature=fwLguKJtHglYEbm+ammmPmaXPMAT9sSg1/EG9XEq6fM=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:25:02.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Date: 
+      - Tue, 28 Aug 2012 23:25:03 GMT
+      Transfer-Encoding: 
+      - chunked
+      Content-Type: 
+      - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>a1f18086-624c-4e8e-a81c-ebf736b9f344</requestId>
+            <reservationSet>
+                <item>
+                    <reservationId>r-1ff40478</reservationId>
+                    <ownerId>122214243412</ownerId>
+                    <groupSet>
+                        <item>
+                            <groupId>default</groupId>
+                        </item>
+                    </groupSet>
+                    <instancesSet>
+                        <item>
+                            <instanceId>i-768c640c</instanceId>
+                            <imageId>ami-aecd60c7</imageId>
+                            <instanceState>
+                                <code>16</code>
+                                <name>running</name>
+                            </instanceState>
+                            <privateDnsName>domU-12-31-39-03-CA-6E.compute-1.internal</privateDnsName>
+                            <dnsName>ec2-23-22-221-103.compute-1.amazonaws.com</dnsName>
+                            <reason/>
+                            <amiLaunchIndex>0</amiLaunchIndex>
+                            <productCodes/>
+                            <instanceType>t1.micro</instanceType>
+                            <launchTime>2012-08-28T23:24:39.000Z</launchTime>
+                            <placement>
+                                <availabilityZone>us-east-1a</availabilityZone>
+                                <groupName/>
+                            </placement>
+                            <kernelId>aki-88aa75e1</kernelId>
+                            <monitoring>
+                                <state>disabled</state>
+                            </monitoring>
+                            <privateIpAddress>10.249.201.152</privateIpAddress>
+                            <ipAddress>23.22.221.103</ipAddress>
+                            <architecture>x86_64</architecture>
+                            <rootDeviceType>ebs</rootDeviceType>
+                            <rootDeviceName>/dev/sda1</rootDeviceName>
+                            <blockDeviceMapping>
+                                <item>
+                                    <deviceName>/dev/sda1</deviceName>
+                                    <ebs>
+                                        <volumeId>vol-75aa0f0e</volumeId>
+                                        <status>attached</status>
+                                        <attachTime>2012-08-28T23:25:01.000Z</attachTime>
+                                        <deleteOnTermination>true</deleteOnTermination>
+                                    </ebs>
+                                </item>
+                            </blockDeviceMapping>
+                            <virtualizationType>paravirtual</virtualizationType>
+                            <clientToken/>
+                        </item>
+                    </instancesSet>
+                </item>
+            </reservationSet>
+        </DescribeInstancesResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 23:25:03 GMT
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DescribeInstances&InstanceId.1=i-768c640c&Signature=oOTcViQozv2KBCKISS1arGBbGhi/xMSwpfrgNuBK1co=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:25:03.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Date: 
+      - Tue, 28 Aug 2012 23:25:03 GMT
+      Transfer-Encoding: 
+      - chunked
+      Content-Type: 
+      - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>be67624c-43dd-4f58-a2ed-3ed3358ea70d</requestId>
+            <reservationSet>
+                <item>
+                    <reservationId>r-1ff40478</reservationId>
+                    <ownerId>122214243412</ownerId>
+                    <groupSet>
+                        <item>
+                            <groupId>default</groupId>
+                        </item>
+                    </groupSet>
+                    <instancesSet>
+                        <item>
+                            <instanceId>i-768c640c</instanceId>
+                            <imageId>ami-aecd60c7</imageId>
+                            <instanceState>
+                                <code>16</code>
+                                <name>running</name>
+                            </instanceState>
+                            <privateDnsName>domU-12-31-39-03-CA-6E.compute-1.internal</privateDnsName>
+                            <dnsName>ec2-23-22-221-103.compute-1.amazonaws.com</dnsName>
+                            <reason/>
+                            <amiLaunchIndex>0</amiLaunchIndex>
+                            <productCodes/>
+                            <instanceType>t1.micro</instanceType>
+                            <launchTime>2012-08-28T23:24:39.000Z</launchTime>
+                            <placement>
+                                <availabilityZone>us-east-1a</availabilityZone>
+                                <groupName/>
+                            </placement>
+                            <kernelId>aki-88aa75e1</kernelId>
+                            <monitoring>
+                                <state>disabled</state>
+                            </monitoring>
+                            <privateIpAddress>10.249.201.152</privateIpAddress>
+                            <ipAddress>23.22.221.103</ipAddress>
+                            <architecture>x86_64</architecture>
+                            <rootDeviceType>ebs</rootDeviceType>
+                            <rootDeviceName>/dev/sda1</rootDeviceName>
+                            <blockDeviceMapping>
+                                <item>
+                                    <deviceName>/dev/sda1</deviceName>
+                                    <ebs>
+                                        <volumeId>vol-75aa0f0e</volumeId>
+                                        <status>attached</status>
+                                        <attachTime>2012-08-28T23:25:01.000Z</attachTime>
+                                        <deleteOnTermination>true</deleteOnTermination>
+                                    </ebs>
+                                </item>
+                            </blockDeviceMapping>
+                            <virtualizationType>paravirtual</virtualizationType>
+                            <clientToken/>
+                        </item>
+                    </instancesSet>
+                </item>
+            </reservationSet>
+        </DescribeInstancesResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 23:25:03 GMT
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=TerminateInstances&InstanceId.1=i-768c640c&Signature=kTmPtjoaUUqtXzwg3u3DEiK5i95ENZWKKRnkNJk9+aw=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:25:03.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Date: 
+      - Tue, 28 Aug 2012 23:25:03 GMT
+      Transfer-Encoding: 
+      - chunked
+      Content-Type: 
+      - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <TerminateInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>5f727b94-b7b6-42d7-a91d-656f84614b98</requestId>
+            <instancesSet>
+                <item>
+                    <instanceId>i-768c640c</instanceId>
+                    <currentState>
+                        <code>32</code>
+                        <name>shutting-down</name>
+                    </currentState>
+                    <previousState>
+                        <code>16</code>
+                        <name>running</name>
+                    </previousState>
+                </item>
+            </instancesSet>
+        </TerminateInstancesResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 23:25:04 GMT
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DescribeInstances&InstanceId.1=i-768c640c&Signature=ma4c9NIDY+wOdJZwqEg6JciJwSq6jgj/Ip8G63vrjhk=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T23:25:04.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Date: 
+      - Tue, 28 Aug 2012 23:25:04 GMT
+      Transfer-Encoding: 
+      - chunked
+      Content-Type: 
+      - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>56a061b3-3d36-459a-80cf-544717a0165f</requestId>
+            <reservationSet>
+                <item>
+                    <reservationId>r-1ff40478</reservationId>
+                    <ownerId>122214243412</ownerId>
+                    <groupSet>
+                        <item>
+                            <groupId>default</groupId>
+                        </item>
+                    </groupSet>
+                    <instancesSet>
+                        <item>
+                            <instanceId>i-768c640c</instanceId>
+                            <imageId>ami-aecd60c7</imageId>
+                            <instanceState>
+                                <code>32</code>
+                                <name>shutting-down</name>
+                            </instanceState>
+                            <privateDnsName>domU-12-31-39-03-CA-6E.compute-1.internal</privateDnsName>
+                            <dnsName>ec2-23-22-221-103.compute-1.amazonaws.com</dnsName>
+                            <reason>User initiated (2012-08-28 23:25:04 GMT)</reason>
+                            <amiLaunchIndex>0</amiLaunchIndex>
+                            <productCodes/>
+                            <instanceType>t1.micro</instanceType>
+                            <launchTime>2012-08-28T23:24:39.000Z</launchTime>
+                            <placement>
+                                <availabilityZone>us-east-1a</availabilityZone>
+                                <groupName/>
+                            </placement>
+                            <kernelId>aki-88aa75e1</kernelId>
+                            <monitoring>
+                                <state>disabled</state>
+                            </monitoring>
+                            <privateIpAddress>10.249.201.152</privateIpAddress>
+                            <ipAddress>23.22.221.103</ipAddress>
+                            <stateReason>
+                                <code>Client.UserInitiatedShutdown</code>
+                                <message>Client.UserInitiatedShutdown: User initiated shutdown</message>
+                            </stateReason>
+                            <architecture>x86_64</architecture>
+                            <rootDeviceType>ebs</rootDeviceType>
+                            <rootDeviceName>/dev/sda1</rootDeviceName>
+                            <blockDeviceMapping>
+                                <item>
+                                    <deviceName>/dev/sda1</deviceName>
+                                    <ebs>
+                                        <volumeId>vol-75aa0f0e</volumeId>
+                                        <status>attached</status>
+                                        <attachTime>2012-08-28T23:25:01.000Z</attachTime>
+                                        <deleteOnTermination>true</deleteOnTermination>
+                                    </ebs>
+                                </item>
+                            </blockDeviceMapping>
+                            <virtualizationType>paravirtual</virtualizationType>
+                            <clientToken/>
+                        </item>
+                    </instancesSet>
+                </item>
+            </reservationSet>
+        </DescribeInstancesResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 23:25:05 GMT
diff --git a/server/tests/drivers/ec2/fixtures/test_0009_must_allow_to_reboot_instance_in_running_state-9.yml b/server/tests/drivers/ec2/fixtures/test_0009_must_allow_to_reboot_instance_in_running_state-9.yml
new file mode 100644
index 0000000..b6f1760
--- /dev/null
+++ b/server/tests/drivers/ec2/fixtures/test_0009_must_allow_to_reboot_instance_in_running_state-9.yml
@@ -0,0 +1,88 @@
+--- 
+http_interactions: 
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJYOQYLLOIWN5LQ3A&Action=DescribeInstances&InstanceId.1=i-7177920a&Signature=DHxm7p2CMHn5fzkybhIzC977iJ/i59rnLEIXVWdrTVE=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-07-30T11:05:00.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      User-Agent: 
+      - ""
+      Accept: 
+      - "*/*"
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Content-Type: 
+      - text/xml;charset=UTF-8
+      Server: 
+      - AmazonEC2
+      Transfer-Encoding: 
+      - chunked
+      Date: 
+      - Mon, 30 Jul 2012 11:07:29 GMT
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>c28d5a60-c784-4b86-976a-da4ad72f3b57</requestId>
+            <reservationSet>
+                <item>
+                    <reservationId>r-362c9d52</reservationId>
+                    <ownerId>293787749884</ownerId>
+                    <groupSet>
+                        <item>
+                            <groupId>default</groupId>
+                        </item>
+                    </groupSet>
+                    <instancesSet>
+                        <item>
+                            <instanceId>i-7177920a</instanceId>
+                            <imageId>ami-aecd60c7</imageId>
+                            <instanceState>
+                                <code>0</code>
+                                <name>pending</name>
+                            </instanceState>
+                            <privateDnsName>domU-12-31-39-02-75-62.compute-1.internal</privateDnsName>
+                            <dnsName>ec2-23-20-114-135.compute-1.amazonaws.com</dnsName>
+                            <reason/>
+                            <amiLaunchIndex>0</amiLaunchIndex>
+                            <productCodes/>
+                            <instanceType>t1.micro</instanceType>
+                            <launchTime>2012-07-30T11:07:18.000Z</launchTime>
+                            <placement>
+                                <availabilityZone>us-east-1a</availabilityZone>
+                                <groupName/>
+                            </placement>
+                            <kernelId>aki-88aa75e1</kernelId>
+                            <monitoring>
+                                <state>disabled</state>
+                            </monitoring>
+                            <privateIpAddress>10.248.122.144</privateIpAddress>
+                            <ipAddress>23.20.114.135</ipAddress>
+                            <architecture>x86_64</architecture>
+                            <rootDeviceType>ebs</rootDeviceType>
+                            <rootDeviceName>/dev/sda1</rootDeviceName>
+                            <blockDeviceMapping>
+                                <item>
+                                    <deviceName>/dev/sda1</deviceName>
+                                    <ebs>
+                                        <volumeId>vol-ba6f60db</volumeId>
+                                        <status>attaching</status>
+                                        <attachTime>2012-07-30T11:07:24.000Z</attachTime>
+                                        <deleteOnTermination>true</deleteOnTermination>
+                                    </ebs>
+                                </item>
+                            </blockDeviceMapping>
+                            <virtualizationType>paravirtual</virtualizationType>
+                            <clientToken/>
+                        </item>
+                    </instancesSet>
+                </item>
+            </reservationSet>
+        </DescribeInstancesResponse>
+    http_version: 
+  recorded_at: Mon, 30 Jul 2012 11:05:00 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/ec2/instance_test.rb b/server/tests/drivers/ec2/instance_test.rb
index ed50c7d..2cbf848 100644
--- a/server/tests/drivers/ec2/instance_test.rb
+++ b/server/tests/drivers/ec2/instance_test.rb
@@ -90,6 +90,16 @@ describe 'Ec2Driver Instances' do
     instances.each { |i| i.is_stopped?.must_equal true }
   end
 
+  it 'must allow creating instance in a VPC subnet' do
+    realm_id = "#{@@subnet[:availability_zone]}:#{@@subnet[:subnet_id]}"
+    instance = @driver.create_instance('ami-aecd60c7',
+                                       :realm_id => realm_id,
+                                       :hwp_id => 'm1.small')
+    instance.must_be_kind_of Instance
+    instance.realm_id.must_equal realm_id
+    @driver.destroy_instance(instance.id)
+  end
+
   it 'must allow to reboot instance in running state' do
     instance = @driver.create_instance('ami-aecd60c7', :realm_id => 'us-east-1a', :hwp_id => 't1.micro')
     instance = instance.wait_for!(@driver, record_retries) { |i| i.is_running? }
-- 
1.7.7.6


[PATCH 1/3] EC2 tests: read credentials from config file

Posted by lu...@redhat.com.
From: David Lutterkort <lu...@redhat.com>

---
 server/tests/drivers/ec2/common.rb |    5 +----
 1 files changed, 1 insertions(+), 4 deletions(-)

diff --git a/server/tests/drivers/ec2/common.rb b/server/tests/drivers/ec2/common.rb
index a8a5471..fa34237 100644
--- a/server/tests/drivers/ec2/common.rb
+++ b/server/tests/drivers/ec2/common.rb
@@ -6,10 +6,7 @@ require 'vcr'
 require_relative '../../test_helper.rb'
 
 def credentials
-  {
-    :user => 'AKIAJYOQYLLOIWN5LQ3A',
-    :password => 'Ra2ViYaYgocAJqPAQHxMVU/l2sGGU2pifmWT4q3H'
-  }
+  Deltacloud::Test::config.credentials('ec2')
 end
 
 VCR.configure do |c|
-- 
1.7.7.6


[PATCH 2/3] EC2: list subnets as realms

Posted by lu...@redhat.com.
From: David Lutterkort <lu...@redhat.com>

Subnets (from VPC's) are listed as realms.

Note that this patch monkey patches the aws gem; the corresponding patch
has been sent upstream, it is included here to make testing the patch easier.
---
 .../deltacloud/drivers/ec2/aws_vpc_monkey_patch.rb |  294 ++++++++++++++++++++
 server/lib/deltacloud/drivers/ec2/ec2_driver.rb    |   29 ++-
 server/tests/drivers/ec2/common.rb                 |   30 ++
 .../drivers/ec2/fixtures/create_resources.yml      |   79 ++++++
 .../drivers/ec2/fixtures/destroy_resources.yml     |   67 +++++
 .../test_0002_must_return_list_of_realms.yml       |   92 ++++++-
 .../test_0005_must_list_VPC_subnets_as_realms.yml  |  109 ++++++++
 server/tests/drivers/ec2/realms_test.rb            |    5 +
 8 files changed, 696 insertions(+), 9 deletions(-)
 create mode 100644 server/lib/deltacloud/drivers/ec2/aws_vpc_monkey_patch.rb
 create mode 100644 server/tests/drivers/ec2/fixtures/create_resources.yml
 create mode 100644 server/tests/drivers/ec2/fixtures/destroy_resources.yml
 create mode 100644 server/tests/drivers/ec2/fixtures/test_0005_must_list_VPC_subnets_as_realms.yml

diff --git a/server/lib/deltacloud/drivers/ec2/aws_vpc_monkey_patch.rb b/server/lib/deltacloud/drivers/ec2/aws_vpc_monkey_patch.rb
new file mode 100644
index 0000000..3f1d491
--- /dev/null
+++ b/server/lib/deltacloud/drivers/ec2/aws_vpc_monkey_patch.rb
@@ -0,0 +1,294 @@
+# This is a copy of code that has been submitted upstream
+# https://github.com/appoxy/aws/pull/116
+#
+# If you make changes here, make sure they go upstream, too
+
+unless Aws::Ec2::method_defined?(:create_vpc)
+  class Aws::Ec2
+    #-----------------------------------------------------------------
+    #      VPC related
+    #-----------------------------------------------------------------
+
+    # Create VPC
+    # http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVpc.html
+    #
+    # ec2.create_vpc("10.0.0.0/16")
+    # FIXME: EVen though the EC2 docs describe the parameter instanceTenancy,
+    # I could not get it to recognize that
+    def create_vpc(cidr_block = "10.0.0.0/16")
+      params = { "CidrBlock" => cidr_block }
+      link = generate_request("CreateVpc", params)
+      request_info(link, QEc2VpcsParser.new("vpc", :logger => @logger))
+    rescue Exception
+      on_exception
+    end
+
+
+    # Describe  VPC's
+    # http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeVpcs.html
+    #
+    # ec2.describe_vpcs
+    # ec2.describe_vpcs(vpcId1, vpcId2, 'Filter.1.Name' => 'state', 'Filter.1.Value' = > 'pending', ...)
+    def describe_vpcs(*args)
+      if args.last.is_a?(Hash)
+        params = args.pop.dup
+      else
+        params = {}
+      end
+      1.upto(args.size) { |i| params["VpcId.#{i}"] = args[i-1] }
+      link = generate_request("DescribeVpcs", params)
+      request_info(link, QEc2VpcsParser.new("item", :logger => @logger))
+    rescue Exception
+      on_exception
+    end
+
+    # Delete VPC
+    # http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteVpc.html
+    #
+    # ec2.delete_vpc(vpc_id)
+    def delete_vpc(vpc_id)
+      params = { "VpcId" => vpc_id }
+      link = generate_request("DeleteVpc", params)
+      request_info(link, RightBoolResponseParser.new(:logger => @logger))
+    rescue Exception
+      on_exception
+    end
+
+    # Create subnet in a VPC
+    # http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateSubnet.html
+    #
+    # ec2.create_subnet(vpc_id, cidr_block)
+    # ec2.create_subnet(vpc_id, cidr_block, availability_zone))
+    def create_subnet(vpc_id, cidr_block, availability_zone = nil)
+      params = { "VpcId" => vpc_id, "CidrBlock" => cidr_block }
+      params["AvailabilityZone"] = availability_zone if availability_zone
+      link = generate_request("CreateSubnet", params)
+      request_info(link, QEc2SubnetsParser.new("subnet", :logger => @logger))
+    rescue Exception
+      on_exception
+    end
+
+    # Describe subnets
+    # http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeSubnets.html
+    #
+    # ec2.describe_subnets
+    # ecs.describe_subnets(subnetId1, SubnetId2, ...,
+    #                      'Filter.1.Name' => 'state',
+    #                      'Filter.1.Value.1' => 'pending',
+    #                      'Filter.2.Name' => ...)
+    def describe_subnets(*args)
+      if args.last.is_a?(Hash)
+        params = args.pop.dup
+      else
+        params = {}
+      end
+      1.upto(args.size) { |i| params["SubnetId.#{i}"] = args[i-1] }
+      link = generate_request("DescribeSubnets", params)
+      request_info(link, QEc2SubnetsParser.new("item", :logger => @logger))
+    rescue Exception
+      on_exception
+    end
+
+    # Delete Subnet
+    # http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteSubnet.html
+    #
+    # ec2.delete_subnet(subnet_id)
+    def delete_subnet(subnet_id)
+      params = { "SubnetId" => subnet_id }
+      link = generate_request("DeleteSubnet", params)
+      request_info(link, RightBoolResponseParser.new(:logger => @logger))
+    rescue Exception
+      on_exception
+    end
+
+    # The only change in this class compared to upstream is
+    # that we parse out subnetId and vpcId
+    class QEc2DescribeInstancesParser < Aws::AwsParser #:nodoc:
+      def tagstart(name, attributes)
+        # DescribeInstances property
+        if (name == 'item' && @xmlpath == 'DescribeInstancesResponse/reservationSet') ||
+            # RunInstances property
+        (name == 'RunInstancesResponse')
+          @reservation = {:aws_groups    => [],
+                          :instances_set => []}
+
+        elsif (name == 'item') &&
+            # DescribeInstances property
+        (@xmlpath=='DescribeInstancesResponse/reservationSet/item/instancesSet' ||
+            # RunInstances property
+        @xmlpath=='RunInstancesResponse/instancesSet')
+          # the optional params (sometimes are missing and we dont want them to be nil)
+          @instance = {:aws_reason        => '',
+                       :dns_name          => '',
+                       :private_dns_name  => '',
+                       :ami_launch_index  => '',
+                       :ssh_key_name      => '',
+                       :aws_state         => '',
+                       :root_device_type  => '',
+                       :root_device_name  => '',
+                       :architecture      => '',
+                       :subnet_id         => '',
+                       :vpc_id            => '',
+                       :block_device_mappings => [],
+                       :aws_product_codes => [],
+                       :tags              => {}}
+        end
+      end
+
+      def tagend(name)
+        case name
+          when  'rootDeviceType' then
+            @instance[:root_device_type] = @text
+          when 'architecture' then
+            @instance[:architecture] = @text
+          when 'rootDeviceName' then
+            @instance[:root_device_name] = @text
+          # reservation
+          when 'reservationId' then
+            @reservation[:aws_reservation_id] = @text
+          when 'ownerId' then
+            @reservation[:aws_owner] = @text
+          when 'groupId' then
+            @reservation[:aws_groups] << @text
+          # instance
+          when 'instanceId' then
+            @instance[:aws_instance_id] = @text
+          when 'imageId' then
+            @instance[:aws_image_id] = @text
+          when 'dnsName' then
+            @instance[:dns_name] = @text
+          when 'privateDnsName' then
+            @instance[:private_dns_name] = @text
+          when 'reason' then
+            @instance[:aws_reason] = @text
+          when 'keyName' then
+            @instance[:ssh_key_name] = @text
+          when 'amiLaunchIndex' then
+            @instance[:ami_launch_index] = @text
+          when 'code' then
+            @instance[:aws_state_code] = @text
+          when 'name' then
+            @instance[:aws_state] = @text
+          when 'productCode' then
+            @instance[:aws_product_codes] << @text
+          when 'instanceType' then
+            @instance[:aws_instance_type] = @text
+          when 'launchTime' then
+            @instance[:aws_launch_time] = @text
+          when 'kernelId' then
+            @instance[:aws_kernel_id] = @text
+          when 'ramdiskId' then
+            @instance[:aws_ramdisk_id] = @text
+          when 'platform' then
+            @instance[:aws_platform] = @text
+          when 'availabilityZone' then
+            @instance[:aws_availability_zone] = @text
+          when 'privateIpAddress' then
+            @instance[:aws_private_ip_address] = @text
+          when 'subnetId' then
+            @instance[:subnet_id] = @text
+          when 'vpcId' then
+            @instance[:vpc_id] = @text
+          when 'key' then
+            @tag_key = @text
+          when 'value' then
+            @tag_value = @text
+          when 'deviceName' then
+            @device_name = @text
+          when 'volumeId' then
+            @volume_id = @text
+          when 'state'
+            if @xmlpath == 'DescribeInstancesResponse/reservationSet/item/instancesSet/item/monitoring' || # DescribeInstances property
+            @xmlpath == 'RunInstancesResponse/instancesSet/item/monitoring' # RunInstances property
+              @instance[:monitoring_state] = @text
+            end
+          when 'item'
+            if @xmlpath=='DescribeInstancesResponse/reservationSet/item/instancesSet/item/tagSet' # Tags
+              @instance[:tags][@tag_key] = @tag_value
+            elsif @xmlpath == 'DescribeInstancesResponse/reservationSet/item/instancesSet/item/blockDeviceMapping' # Block device mappings
+              @instance[:block_device_mappings] << { @device_name => @volume_id }
+            elsif @xmlpath == 'DescribeInstancesResponse/reservationSet/item/instancesSet' || # DescribeInstances property
+            @xmlpath == 'RunInstancesResponse/instancesSet' # RunInstances property
+              @reservation[:instances_set] << @instance
+            elsif @xmlpath=='DescribeInstancesResponse/reservationSet' # DescribeInstances property
+              @result << @reservation
+            end
+          when 'RunInstancesResponse' then
+            @result << @reservation # RunInstances property
+        end
+      end
+
+      def reset
+        @result = []
+      end
+    end
+
+    #-----------------------------------------------------------------
+    #      PARSERS: Vpc
+    #-----------------------------------------------------------------
+
+    class QEc2VpcsParser < Aws::AwsParser #:nodoc:
+      def initialize(wrapper, opts = {})
+        super(opts)
+        @wrapper = wrapper
+      end
+
+      def tagstart(name, attribute)
+        @vpc = {} if name == @wrapper
+      end
+
+      def tagend(name)
+        case name
+        when 'vpcId' then
+          @vpc[:vpc_id] = @text
+        when 'state' then
+          @vpc[:state] = @text
+        when 'cidrBlock' then
+          @vpc[:cidr_block] = @text
+        when 'dhcpOptionsId' then
+          @vpc[:dhcp_options_id] = @text
+        when @wrapper
+          @result << @vpc
+        end
+      end
+
+      def reset
+        @result = []
+      end
+    end
+
+    class QEc2SubnetsParser < Aws::AwsParser #:nodoc
+      def initialize(wrapper, opts = {})
+        super(opts)
+        @wrapper = wrapper
+      end
+
+      def tagstart(name, attribute)
+        @subnet = {} if name == @wrapper
+      end
+
+      def tagend(name)
+        case name
+        when 'subnetId' then
+          @subnet[:subnet_id] = @text
+        when 'state' then
+          @subnet[:state] = @text
+        when 'vpcId' then
+          @subnet[:vpc_id] = @text
+        when 'cidrBlock' then
+          @subnet[:cidr_block] = @text
+        when 'availableIpAddressCount' then
+          @subnet[:available_ip_address_count] = @text
+        when 'availabilityZone' then
+          @subnet[:availability_zone] = @text
+        when @wrapper
+          @result << @subnet
+        end
+      end
+
+      def reset
+        @result = []
+      end
+    end
+  end
+end
diff --git a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
index 8847034..31fcfa5 100644
--- a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
+++ b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
@@ -15,6 +15,8 @@
 #
 
 require 'aws'
+# Delete this once VPC support is merged upstream
+require_relative 'aws_vpc_monkey_patch'
 
 require_relative '../../runner'
 
@@ -164,22 +166,35 @@ module Deltacloud
         end
 
         def realms(credentials, opts={})
+          # We have two different kinds of realms:
+          #  (1) Availability Zones
+          #  (2) Subnets in VPC's (scoped to an AZ)
+          # For the latter, the ID is AZ:SUBNET, and we can tell that we
+          # are looking at such a realm by checking if the id contains a colon
           ec2 = new_client(credentials)
           realms = []
           safely do
             if opts[:id] and !opts[:id].empty?
+              az, sn = opts[:id].split(":")
               begin
-                ec2.describe_availability_zones([opts[:id]]).collect do |realm|
-                  realms << convert_realm(realm) unless realm.empty?
+                if sn
+                  subnet = ec2.describe_subnets(sn).first
+                  realms << convert_realm(subnet) if subnet
+                else
+                  ec2.describe_availability_zones(az).collect do |realm|
+                    realms << convert_realm(realm) unless realm.empty?
+                  end
                 end
               rescue => e
                 raise e unless e.message =~ /Invalid availability zone/
                 realms = []
               end
             else
-              ec2.describe_availability_zones.collect do |realm|
-                realms << convert_realm(realm) unless realm.empty?
+              realms = ec2.describe_availability_zones.collect do |realm|
+                convert_realm(realm) unless realm.empty?
               end
+              realms = realms +
+                ec2.describe_subnets.map { |sn| convert_realm(sn) }
             end
           end
           realms
@@ -871,6 +886,12 @@ module Deltacloud
         end
 
         def convert_realm(realm)
+          # We also allow subnets as realms
+          if realm[:subnet_id]
+            realm[:zone_name] =
+              "#{realm[:availability_zone]}:#{realm[:subnet_id]}"
+            realm[:zone_state] = realm[:state]
+          end
           Realm.new(
             :id => realm[:zone_name],
             :name => realm[:zone_name],
diff --git a/server/tests/drivers/ec2/common.rb b/server/tests/drivers/ec2/common.rb
index fa34237..7d63dc9 100644
--- a/server/tests/drivers/ec2/common.rb
+++ b/server/tests/drivers/ec2/common.rb
@@ -4,11 +4,20 @@ require 'right_http_connection'
 require 'vcr'
 
 require_relative '../../test_helper.rb'
+require_relative '../../../lib/deltacloud/drivers/ec2/ec2_driver'
 
 def credentials
   Deltacloud::Test::config.credentials('ec2')
 end
 
+# Monkey patch EC2 driver to return a client
+class Deltacloud::Drivers::Ec2::Ec2Driver
+  def client(credentials)
+    new_client(credentials)
+  end
+end
+
+# Configure VCR
 VCR.configure do |c|
   # NOTE: Empty this directory before re-recording
   c.cassette_library_dir = File.join(File.dirname(__FILE__), 'fixtures')
@@ -18,3 +27,24 @@ VCR.configure do |c|
   c.register_request_matcher(:ec2_matcher, &matcher)
   c.default_cassette_options = { :record => :none, :match_requests_on => [:method, :ec2_matcher] }
 end
+
+# Setup resources we need for the tests
+def create_resources
+  VCR.use_cassette "create_resources" do
+    driver = Deltacloud::new(:ec2, credentials)
+    @@ec2 = driver.client
+    @@vpc = @@ec2.create_vpc("172.16.0.0/16").first
+    @@subnet = @@ec2.create_subnet(@@vpc[:vpc_id], "172.16.3.0/24", "us-east-1b").first
+  end
+end
+
+def destroy_resources
+  VCR.use_cassette "destroy_resources" do
+    @@ec2.delete_subnet(@@subnet[:subnet_id]) if @@subnet
+    @@ec2.delete_vpc(@@vpc[:vpc_id]) if @@vpc
+  end
+end
+
+MiniTest::Unit::after_tests { destroy_resources }
+
+create_resources
diff --git a/server/tests/drivers/ec2/fixtures/create_resources.yml b/server/tests/drivers/ec2/fixtures/create_resources.yml
new file mode 100644
index 0000000..fb14d7b
--- /dev/null
+++ b/server/tests/drivers/ec2/fixtures/create_resources.yml
@@ -0,0 +1,79 @@
+--- 
+http_interactions: 
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=CreateVpc&CidrBlock=172.16.0.0/16&Signature=1v+DVE5pE5wAGscby85h5Phi5O5OEl+3WgxOn/BgNaE=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T22:36:42.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Server: 
+      - AmazonEC2
+      Transfer-Encoding: 
+      - chunked
+      Date: 
+      - Tue, 28 Aug 2012 22:36:42 GMT
+      Content-Type: 
+      - text/xml;charset=UTF-8
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <CreateVpcResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>12201e58-4637-4663-a0da-a9c3bcf49d5c</requestId>
+            <vpc>
+                <vpcId>vpc-6a952301</vpcId>
+                <state>pending</state>
+                <cidrBlock>172.16.0.0/16</cidrBlock>
+                <dhcpOptionsId>default</dhcpOptionsId>
+            </vpc>
+        </CreateVpcResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 22:36:42 GMT
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=CreateSubnet&AvailabilityZone=us-east-1b&CidrBlock=172.16.3.0/24&Signature=EIzFCEEuL0/0E/GVatWByMC0qybmPTw0+kd2xHnOGuw=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T22:36:42.000Z&Version=2010-08-31&VpcId=vpc-6a952301
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Server: 
+      - AmazonEC2
+      Transfer-Encoding: 
+      - chunked
+      Date: 
+      - Tue, 28 Aug 2012 22:36:43 GMT
+      Content-Type: 
+      - text/xml;charset=UTF-8
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <CreateSubnetResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>e3939c15-3c67-4e33-b1d8-88242dd2317c</requestId>
+            <subnet>
+                <subnetId>subnet-62952309</subnetId>
+                <state>pending</state>
+                <vpcId>vpc-6a952301</vpcId>
+                <cidrBlock>172.16.3.0/24</cidrBlock>
+                <availableIpAddressCount>251</availableIpAddressCount>
+                <availabilityZone>us-east-1b</availabilityZone>
+            </subnet>
+        </CreateSubnetResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 22:36:43 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/ec2/fixtures/destroy_resources.yml b/server/tests/drivers/ec2/fixtures/destroy_resources.yml
new file mode 100644
index 0000000..61020fa
--- /dev/null
+++ b/server/tests/drivers/ec2/fixtures/destroy_resources.yml
@@ -0,0 +1,67 @@
+--- 
+http_interactions: 
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DeleteSubnet&Signature=kpx0IU+viAUHCJMSNE+VAc/Hl0oqHdr08cFN7jwJW38=&SignatureMethod=HmacSHA256&SignatureVersion=2&SubnetId=subnet-62952309&Timestamp=2012-08-28T22:36:45.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Server: 
+      - AmazonEC2
+      Transfer-Encoding: 
+      - chunked
+      Date: 
+      - Tue, 28 Aug 2012 22:36:46 GMT
+      Content-Type: 
+      - text/xml;charset=UTF-8
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <DeleteSubnetResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>342eac4f-3687-4d89-92b7-0484b618947e</requestId>
+            <return>true</return>
+        </DeleteSubnetResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 22:36:46 GMT
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DeleteVpc&Signature=OzOLWsGU2ZIwhaA46jecA/wwUeV+hFMu9d1XeUysvG0=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T22:36:46.000Z&Version=2010-08-31&VpcId=vpc-6a952301
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Server: 
+      - AmazonEC2
+      Transfer-Encoding: 
+      - chunked
+      Date: 
+      - Tue, 28 Aug 2012 22:36:46 GMT
+      Content-Type: 
+      - text/xml;charset=UTF-8
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <DeleteVpcResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>d3b55d09-5ece-4b07-a81a-5e9ef3b1d750</requestId>
+            <return>true</return>
+        </DeleteVpcResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 22:36:47 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/ec2/fixtures/test_0002_must_return_list_of_realms.yml b/server/tests/drivers/ec2/fixtures/test_0002_must_return_list_of_realms.yml
index 4929f38..f4ea216 100644
--- a/server/tests/drivers/ec2/fixtures/test_0002_must_return_list_of_realms.yml
+++ b/server/tests/drivers/ec2/fixtures/test_0002_must_return_list_of_realms.yml
@@ -1,5 +1,4 @@
 --- 
-recorded_with: VCR 2.2.4
 http_interactions: 
 - request: 
     method: get
@@ -18,12 +17,12 @@ http_interactions:
     headers: 
       Date: 
       - Mon, 30 Jul 2012 11:05:04 GMT
+      Content-Type: 
+      - text/xml;charset=UTF-8
       Server: 
       - AmazonEC2
       Transfer-Encoding: 
       - chunked
-      Content-Type: 
-      - text/xml;charset=UTF-8
     body: 
       string: |-
         <?xml version="1.0" encoding="UTF-8"?>
@@ -81,12 +80,12 @@ http_interactions:
     headers: 
       Date: 
       - Mon, 30 Jul 2012 11:05:05 GMT
+      Content-Type: 
+      - text/xml;charset=UTF-8
       Server: 
       - AmazonEC2
       Transfer-Encoding: 
       - chunked
-      Content-Type: 
-      - text/xml;charset=UTF-8
     body: 
       string: |-
         <?xml version="1.0" encoding="UTF-8"?>
@@ -127,3 +126,86 @@ http_interactions:
         </DescribeAvailabilityZonesResponse>
     http_version: 
   recorded_at: Mon, 30 Jul 2012 11:05:00 GMT
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DescribeSubnets&Signature=P2fvw5n27dvw0TkOwhu7KiUgKkMR2eCPabzIrNMPLuc=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T19:12:03.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Content-Type: 
+      - text/xml;charset=UTF-8
+      Date: 
+      - Tue, 28 Aug 2012 19:12:04 GMT
+      Server: 
+      - AmazonEC2
+      Transfer-Encoding: 
+      - chunked
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <DescribeSubnetsResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>f2d1c818-096a-4746-afee-7862d0a58cfc</requestId>
+            <subnetSet>
+                <item>
+                    <subnetId>subnet-dd5bfcb6</subnetId>
+                    <state>available</state>
+                    <vpcId>vpc-0b40e760</vpcId>
+                    <cidrBlock>10.1.0.0/24</cidrBlock>
+                    <availableIpAddressCount>251</availableIpAddressCount>
+                    <availabilityZone>us-east-1a</availabilityZone>
+                </item>
+            </subnetSet>
+        </DescribeSubnetsResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 19:12:04 GMT
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DescribeSubnets&Signature=LDiqi0eL5WZCJtyoNdoSjhcVxGsFyowDT2/1jVlx/cM=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T19:12:04.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Content-Type: 
+      - text/xml;charset=UTF-8
+      Date: 
+      - Tue, 28 Aug 2012 19:12:04 GMT
+      Server: 
+      - AmazonEC2
+      Transfer-Encoding: 
+      - chunked
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <DescribeSubnetsResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>e3fce148-6be5-4b2f-99b1-66cc9297ab08</requestId>
+            <subnetSet>
+                <item>
+                    <subnetId>subnet-dd5bfcb6</subnetId>
+                    <state>available</state>
+                    <vpcId>vpc-0b40e760</vpcId>
+                    <cidrBlock>10.1.0.0/24</cidrBlock>
+                    <availableIpAddressCount>251</availableIpAddressCount>
+                    <availabilityZone>us-east-1a</availabilityZone>
+                </item>
+            </subnetSet>
+        </DescribeSubnetsResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 19:12:05 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/ec2/fixtures/test_0005_must_list_VPC_subnets_as_realms.yml b/server/tests/drivers/ec2/fixtures/test_0005_must_list_VPC_subnets_as_realms.yml
new file mode 100644
index 0000000..fdce4eb
--- /dev/null
+++ b/server/tests/drivers/ec2/fixtures/test_0005_must_list_VPC_subnets_as_realms.yml
@@ -0,0 +1,109 @@
+--- 
+http_interactions: 
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DescribeAvailabilityZones&Signature=v93MQI1cGoYMFByjuzOvr9DZAbE50n6cNkgTf4g8rJs=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T22:36:44.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Server: 
+      - AmazonEC2
+      Transfer-Encoding: 
+      - chunked
+      Date: 
+      - Tue, 28 Aug 2012 22:36:45 GMT
+      Content-Type: 
+      - text/xml;charset=UTF-8
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <DescribeAvailabilityZonesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>aa77686e-b8b2-4870-8f1e-6232077dbade</requestId>
+            <availabilityZoneInfo>
+                <item>
+                    <zoneName>us-east-1a</zoneName>
+                    <zoneState>available</zoneState>
+                    <regionName>us-east-1</regionName>
+                    <messageSet/>
+                </item>
+                <item>
+                    <zoneName>us-east-1b</zoneName>
+                    <zoneState>available</zoneState>
+                    <regionName>us-east-1</regionName>
+                    <messageSet/>
+                </item>
+                <item>
+                    <zoneName>us-east-1c</zoneName>
+                    <zoneState>available</zoneState>
+                    <regionName>us-east-1</regionName>
+                    <messageSet/>
+                </item>
+                <item>
+                    <zoneName>us-east-1d</zoneName>
+                    <zoneState>available</zoneState>
+                    <regionName>us-east-1</regionName>
+                    <messageSet/>
+                </item>
+            </availabilityZoneInfo>
+        </DescribeAvailabilityZonesResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 22:36:45 GMT
+- request: 
+    method: get
+    uri: https://ec2.us-east-1.amazonaws.com/?AWSAccessKeyId=AKIAJHMN5TTUKVLK5WCQ&Action=DescribeSubnets&Signature=r2v7oE4F8OoTHhXc1NYAdJTr6giszS8MSsQ7prKHM4g=&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-08-28T22:36:45.000Z&Version=2010-08-31
+    body: 
+      string: ""
+    headers: 
+      Accept: 
+      - "*/*"
+      User-Agent: 
+      - ""
+  response: 
+    status: 
+      code: 200
+      message: OK
+    headers: 
+      Server: 
+      - AmazonEC2
+      Transfer-Encoding: 
+      - chunked
+      Date: 
+      - Tue, 28 Aug 2012 22:36:45 GMT
+      Content-Type: 
+      - text/xml;charset=UTF-8
+    body: 
+      string: |-
+        <?xml version="1.0" encoding="UTF-8"?>
+        <DescribeSubnetsResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
+            <requestId>c95921ad-17a4-4262-b877-2d357f6873f6</requestId>
+            <subnetSet>
+                <item>
+                    <subnetId>subnet-dd5bfcb6</subnetId>
+                    <state>available</state>
+                    <vpcId>vpc-0b40e760</vpcId>
+                    <cidrBlock>10.1.0.0/24</cidrBlock>
+                    <availableIpAddressCount>251</availableIpAddressCount>
+                    <availabilityZone>us-east-1a</availabilityZone>
+                </item>
+                <item>
+                    <subnetId>subnet-62952309</subnetId>
+                    <state>available</state>
+                    <vpcId>vpc-6a952301</vpcId>
+                    <cidrBlock>172.16.3.0/24</cidrBlock>
+                    <availableIpAddressCount>251</availableIpAddressCount>
+                    <availabilityZone>us-east-1b</availabilityZone>
+                </item>
+            </subnetSet>
+        </DescribeSubnetsResponse>
+    http_version: 
+  recorded_at: Tue, 28 Aug 2012 22:36:45 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/ec2/realms_test.rb b/server/tests/drivers/ec2/realms_test.rb
index 5129fe2..0f0b7d2 100644
--- a/server/tests/drivers/ec2/realms_test.rb
+++ b/server/tests/drivers/ec2/realms_test.rb
@@ -40,4 +40,9 @@ describe 'Ec2Driver Realms' do
     @driver.realm(:id => 'unknown').must_be_nil
   end
 
+  it 'must list VPC subnets as realms' do
+    id = "#{@@subnet[:availability_zone]}:#{@@subnet[:subnet_id]}"
+    @driver.realms.find { |r| r.id == id }.wont_be_nil
+  end
+
 end
-- 
1.7.7.6