You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by lu...@apache.org on 2010/07/09 01:21:22 UTC

svn commit: r962077 - /incubator/deltacloud/trunk/drivers/ec2/lib/ec2_driver.rb

Author: lutter
Date: Thu Jul  8 23:21:22 2010
New Revision: 962077

URL: http://svn.apache.org/viewvc?rev=962077&view=rev
Log:
Wire up instance#stop action.
Add realms to driver.

Modified:
    incubator/deltacloud/trunk/drivers/ec2/lib/ec2_driver.rb

Modified: incubator/deltacloud/trunk/drivers/ec2/lib/ec2_driver.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/drivers/ec2/lib/ec2_driver.rb?rev=962077&r1=962076&r2=962077&view=diff
==============================================================================
--- incubator/deltacloud/trunk/drivers/ec2/lib/ec2_driver.rb (original)
+++ incubator/deltacloud/trunk/drivers/ec2/lib/ec2_driver.rb Thu Jul  8 23:21:22 2010
@@ -41,8 +41,8 @@ class Ec2Driver < DeltaCloud::BaseDriver
   ]
 
   INSTANCE_STATES = {
-    :pending=>[],
-    :running=>[ :reboot ],
+    :pending=>[ :stop ],
+    :running=>[ :reboot, :stop ],
     :shutting_down=>[],
     :terminated=>[]
   }
@@ -91,6 +91,21 @@ class Ec2Driver < DeltaCloud::BaseDriver
   end
 
   #
+  # Realms
+  #
+
+  def realms(credentials, opts=nil)
+    ec2 = new_client(credentials)
+    realms = []
+    safely do
+      ec2.describe_availability_zones.each do |ec2_realm|
+        realms << convert_realm( ec2_realm )
+      end
+    end
+    realms
+  end
+
+  #
   # Instances
   #
 
@@ -108,6 +123,7 @@ class Ec2Driver < DeltaCloud::BaseDriver
 
   def create_instance(credentials, image_id, opts)
     ec2 = new_client( credentials )
+    realm_id = opts[:realm_id]
     ec2_instances = ec2.run_instances(
                           image_id,
                           1,1,
@@ -115,18 +131,32 @@ class Ec2Driver < DeltaCloud::BaseDriver
                           nil,
                           '',
                           'public',
-                          opts[:flavor_id].gsub( /-/, '.' ) )
+                          opts[:flavor_id].gsub( /-/, '.' ),
+                          nil,
+                          nil,
+                          realm_id )
     convert_instance( ec2_instances.first )
   end
 
   def reboot_instance(credentials, id)
     ec2 = new_client(credentials)
-    ec2.reboot_instances( id )
+    safely do
+      ec2.reboot_instances( id )
+    end
+  end
+
+  def stop_instance(credentials, id)
+    ec2 = new_client(credentials)
+    safely do
+      ec2.terminate_instances( id )
+    end
   end
 
   def destroy_instance(credentials, id)
     ec2 = new_client(credentials)
-    ec2.terminate_instances( id )
+    safely do
+      ec2.terminate_instances( id )
+    end
   end
 
   #
@@ -189,6 +219,15 @@ class Ec2Driver < DeltaCloud::BaseDriver
     } )
   end
 
+  def convert_realm(ec2_realm)
+    Realm.new( {
+      :id=>ec2_realm[:zone_name],
+      :name=>ec2_realm[:zone_name],
+      :limit=>:unlimited,
+      :state=>ec2_realm[:zone_state].upcase,
+    } )
+  end
+
   def convert_instance(ec2_instance)
     state = ec2_instance[:aws_state].upcase
     state_key = state.downcase.underscore.to_sym
@@ -198,6 +237,7 @@ class Ec2Driver < DeltaCloud::BaseDriver
       :state=>ec2_instance[:aws_state].upcase,
       :image_id=>ec2_instance[:aws_image_id],
       :owner_id=>ec2_instance[:aws_owner],
+      :realm_id=>ec2_instance[:aws_availability_zone],
       :public_addresses=>( ec2_instance[:dns_name] == '' ? [] : [ec2_instance[:dns_name]] ),
       :private_addresses=>( ec2_instance[:private_dns_name] == '' ? [] : [ec2_instance[:private_dns_name]] ),
       :flavor_id=>ec2_instance[:aws_instance_type].gsub( /\./, '-'),