---
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