---
 server/lib/deltacloud/drivers/ec2/ec2_driver.rb |  174 ++++++++++-------------
 1 files changed, 78 insertions(+), 96 deletions(-)

diff --git a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb 
b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
index 7f73666..4777501 100644
--- a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
+++ b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
@@ -17,7 +17,7 @@
 
 
 require 'deltacloud/base_driver'
-require 'right_aws'
+require 'AWS'
 
 module Deltacloud
   module Drivers
@@ -121,35 +121,19 @@ class EC2Driver < Deltacloud::BaseDriver
   # Images
   #
 
-  def images(credentials, opts=nil )
-    puts(opts)
-    ec2 = new_client( credentials )
-    images = []
+  def images(credentials, opts={} )
+    ec2 = new_client(credentials)
+    img_arr = []
+    config = { :owner_id => "amazon" }
+    config.merge!({ :owner_id => opts[:owner_id] }) if opts and opts[:owner_id]
+    config.merge!({ :image_id => opts[:id] }) if opts and opts[:id]
     safely do
-      if ( opts && opts[:id] )
-        ec2.describe_images(opts[:id]).each do |ec2_image|
-          if ( ec2_image[:aws_id] =~ /^ami-/ )
-            images << convert_image( ec2_image )
-          end
-        end
-        filter_on( images, :owner_id, opts )
-      elsif ( opts && opts[:owner_id] )
-        ec2.describe_images_by_owner( opts[:owner_id] ).each do |ec2_image|
-          if ( ec2_image[:aws_id] =~ /^ami-/ )
-            images << convert_image( ec2_image )
-          end
-        end
-      else
-        ec2.describe_images().each do |ec2_image|
-          if ( ec2_image[:aws_id] =~ /^ami-/ )
-            images << convert_image( ec2_image )
-          end
-        end
+      ec2.describe_images(config).imagesSet.item.each do |image|
+        img_arr << convert_image(image)
       end
     end
-
-    images = filter_on( images, :architecture, opts )
-    images.sort_by{|e| [e.owner_id,e.description]}
+    img_arr = filter_on( img_arr, :architecture, opts )
+    img_arr.sort_by{|e| [e.owner_id, e.name]}
   end
 
   #
@@ -160,7 +144,7 @@ class EC2Driver < Deltacloud::BaseDriver
     ec2 = new_client(credentials)
     realms = []
     safely do
-      ec2.describe_availability_zones.each do |ec2_realm|
+      ec2.describe_availability_zones.availabilityZoneInfo.item.each do 
|ec2_realm|
         realms << convert_realm( ec2_realm )
       end
     end
@@ -176,8 +160,11 @@ class EC2Driver < Deltacloud::BaseDriver
     instances = []
     safely do
       param = opts.nil? ? nil : opts[:id]
-      ec2.describe_instances( param ).each do |ec2_instance|
-        instances << convert_instance( ec2_instance )
+      ec2.describe_instances.reservationSet.item.each do |item|
+        item.instancesSet.item.each do |ec2_instance|
+          puts ec2_instance.inspect
+          instances << convert_instance( ec2_instance, item.ownerId )
+        end
       end
     end
     instances = filter_on( instances, :id, opts )
@@ -188,45 +175,43 @@ class EC2Driver < Deltacloud::BaseDriver
   def create_instance(credentials, image_id, opts)
     ec2 = new_client( credentials )
     realm_id = opts[:realm_id]
-    flavor_id = opts[:flavor_id]
-    unless ( flavor_id )
-      image = image(credentials, :id=>image_id )
-      flavor = flavor( credentials, :architecture=>image.architecture )
-      ( flavor_id = flavor.id ) if ( flavor )
+    image = image(credentials, :id => image_id )
+    if opts[:flavor_id]
+      flavor = flavor( credentials, { :architecture => image.architecture, :id 
=> opts[:flavor_id] })
+    else
+      flavor = flavors.first
     end
-    flavor_id.gsub!( /-/, '.' ) if flavor_id
     ec2_instances = ec2.run_instances(
-                          image_id,
-                          1,1,
-                          [],
-                          nil,
-                          opts[:user_data],
-                          'public',
-                          flavor_id,
-                          nil,
-                          nil,
-                          realm_id )
-    convert_instance( ec2_instances.first )
+      :image_id => image.id,
+      :user_data => opts[:user_data],
+      :key_name => opts[:key_name],
+      :availability_zone => realm_id,
+      :monitoring_enabled => true,
+      :instance_type => flavor.id.tr('-','.'),
+      :disable_api_termination => false,
+      :instance_initiated_shutdown_behavior => 'terminate'
+    )
+    convert_instance( ec2_instances.instancesSet.item.first )
   end
 
   def reboot_instance(credentials, id)
     ec2 = new_client(credentials)
     safely do
-      ec2.reboot_instances( id )
+      ec2.reboot_instances( :instance_id => id )
     end
   end
 
   def stop_instance(credentials, id)
     ec2 = new_client(credentials)
     safely do
-      ec2.terminate_instances( id )
+      ec2.terminate_instances( :instance_id => id )
     end
   end
 
   def destroy_instance(credentials, id)
     ec2 = new_client(credentials)
     safely do
-      ec2.terminate_instances( id )
+      ec2.terminate_instances( :instance_id => id )
     end
   end
 
@@ -238,11 +223,11 @@ class EC2Driver < Deltacloud::BaseDriver
     volumes = []
     safely do
       if (opts)
-        ec2.describe_volumes(opts[:id]).each do |ec2_volume|
+        ec2.describe_volumes(:volume_id => opts[:id]).volumeSet.item.each do 
|ec2_volume|
           volumes << convert_volume( ec2_volume )
         end
       else
-        ec2.describe_volumes().each do |ec2_volume|
+        ec2.describe_volumes.volumeSet.item.each do |ec2_volume|
           volumes << convert_volume( ec2_volume )
         end
       end
@@ -259,11 +244,11 @@ class EC2Driver < Deltacloud::BaseDriver
     snapshots = []
     safely do
       if (opts)
-        ec2.describe_snapshots(opts[:id]).each do |ec2_snapshot|
+        ec2.describe_snapshots(:owner => 'self', :snapshot_id => 
opts[:id]).snapshotSet.item.each do |ec2_snapshot|
           snapshots << convert_snapshot( ec2_snapshot )
         end
       else
-        ec2.describe_snapshots(opts).each do |ec2_snapshot|
+        ec2.describe_snapshots(:owner => 'self').snapshotSet.item.each do 
|ec2_snapshot|
           snapshots << convert_snapshot( ec2_snapshot )
         end
       end
@@ -274,81 +259,78 @@ class EC2Driver < Deltacloud::BaseDriver
   private
 
   def new_client(credentials)
-    RightAws::Ec2.new(credentials.user, credentials.password, :cache=>false )
+    AWS::EC2::Base.new(
+      :access_key_id => credentials.user, 
+      :secret_access_key => credentials.password
+    )
   end
 
   def convert_image(ec2_image)
     Image.new( {
-      :id=>ec2_image[:aws_id],
-      :name=>ec2_image[:aws_location],
-      :description=>ec2_image[:aws_location],
-      :owner_id=>ec2_image[:aws_owner],
-      :architecture=>ec2_image[:aws_architecture],
+      :id=>ec2_image['imageId'],
+      :name=>ec2_image['name'] || ec2_image['imageId'],
+      :description=>ec2_image['description'] || ec2_image['imageLocation'] || 
'',
+      :owner_id=>ec2_image['imageOwnerId'],
+      :architecture=>ec2_image['architecture'],
     } )
   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,
+      :id=>ec2_realm['zoneName'],
+      :name=>ec2_realm['regionName'],
+      :limit=>ec2_realm['zoneState'].eql?('available') ? :unlimited : 0,
+      :state=>ec2_realm['zoneState'].upcase,
     } )
   end
 
-  def convert_instance(ec2_instance)
-    state = ec2_instance[:aws_state].upcase
+  def convert_instance(ec2_instance, owner_id=nil)
+    state = ec2_instance['instanceState']['name'].upcase
     state_key = state.downcase.underscore.to_sym
-
-    realm_id = ec2_instance[:aws_availability_zone]
+    realm_id = ec2_instance['placement']['availabilityZone']
     (realm_id = nil ) if ( realm_id == '' )
+
     Instance.new( {
-      :id=>ec2_instance[:aws_instance_id],
-      :name => ec2_instance[:aws_image_id],
-      :state=>ec2_instance[:aws_state].upcase,
-      :image_id=>ec2_instance[:aws_image_id],
-      :owner_id=>ec2_instance[:aws_owner],
+      :id=>ec2_instance['instanceId'],
+      :name => ec2_instance['imageId'],
+      :state=>state,
+      :image_id=>ec2_instance['imageId'],
+      :owner_id=>owner_id,
       :realm_id=>realm_id,
-      :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( /\./, '-'),
-      :actions=>instance_actions_for( ec2_instance[:aws_state].upcase ),
+      :public_addresses=>( ec2_instance['dnsName'] == '' ? [] : 
[ec2_instance['dnsName']] ),
+      :private_addresses=>( ec2_instance['privateDnsName'] == '' ? [] : 
[ec2_instance['privateDnsName']] ),
+      :flavor_id=>ec2_instance['instanceType'].gsub( /\./, '-'),
+      :actions=>instance_actions_for( state ),
     } )
   end
 
   def convert_volume(ec2_volume)
     StorageVolume.new( {
-      :id=>ec2_volume[:aws_id],
-      :created=>ec2_volume[:aws_created_at],
-      :state=>ec2_volume[:aws_status].upcase,
-      :capacity=>ec2_volume[:aws_size],
-      :instance_id=>ec2_volume[:aws_instance_id],
-      :device=>ec2_volume[:aws_device],
+      :id=>ec2_volume['volumeId'],
+      :created=>ec2_volume['createTime'],
+      :state=>ec2_volume['status'].upcase,
+      :capacity=>ec2_volume['size'],
+      :instance_id=>ec2_volume['snapshotId'],
+      :device=>ec2_volume['attachmentSet'],
     } )
   end
 
   def convert_snapshot(ec2_snapshot)
     StorageSnapshot.new( {
-      :id=>ec2_snapshot[:aws_id],
-      :state=>ec2_snapshot[:aws_status].upcase,
-      :storage_volume_id=>ec2_snapshot[:aws_volume_id],
-      :created=>ec2_snapshot[:aws_started_at],
+      :id=>ec2_snapshot['snapshotId'],
+      :state=>ec2_snapshot['status'].upcase,
+      :storage_volume_id=>ec2_snapshot['volumeId'],
+      :created=>ec2_snapshot['startTime'],
     } )
   end
 
   def safely(&block)
     begin
       block.call
-    rescue RightAws::AwsError => e
-      if ( e.include?( /SignatureDoesNotMatch/ ) )
-        raise Deltacloud::AuthException.new
-      elsif ( e.include?( /InvalidClientTokenId/ ) )
+    rescue AWS::AuthFailure => e
         raise Deltacloud::AuthException.new
-      else
-        e.errors.each do |error|
-          puts "ERROR #{error.inspect}"
-        end
-      end
+    rescue Exception => e
+        puts "ERROR: #{e.message}"
     end
   end
 
-- 
1.6.6.2

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to