You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by mf...@redhat.com on 2012/07/23 14:42:23 UTC
[PATCH core 1/3] EC2: Return 'nil' instead of exception when resource not found
From: Michal Fojtik <mf...@redhat.com>
Before this patch, when the given resource (Instance, Realm, Image)
not exists in EC2, an exception was thrown.
This behavior is not really consistent with other drivers, like Mock
where empty set or 'nil' is returned in this case.
Signed-off-by: Michal fojtik <mf...@redhat.com>
---
server/lib/deltacloud/drivers/ec2/ec2_driver.rb | 38 +++++++++++++++++------
1 file changed, 29 insertions(+), 9 deletions(-)
diff --git a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
index 177e73f..cc69136 100644
--- a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
+++ b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
@@ -142,8 +142,13 @@ module Deltacloud
profiles = hardware_profiles(nil)
if opts[:id]
safely do
- img_arr = ec2.describe_images([opts[:id]]).collect do |image|
- convert_image(image, profiles)
+ begin
+ img_arr = ec2.describe_images([opts[:id]]).collect do |image|
+ convert_image(image, profiles)
+ end
+ rescue => e
+ raise e unless e.message =~ /Invalid id/ or e.message =~ /does not exist/
+ img_arr = []
end
end
return img_arr
@@ -163,8 +168,13 @@ module Deltacloud
realms = []
safely do
if opts[:id] and !opts[:id].empty?
- ec2.describe_availability_zones([opts[:id]]).collect do |realm|
- realms << convert_realm(realm) unless realm.empty?
+ begin
+ ec2.describe_availability_zones([opts[:id]]).collect do |realm|
+ realms << convert_realm(realm) unless realm.empty?
+ end
+ rescue => e
+ raise e unless e.message =~ /Invalid availability zone/
+ realms = []
end
else
ec2.describe_availability_zones.collect do |realm|
@@ -197,8 +207,13 @@ module Deltacloud
ec2 = new_client(credentials)
inst_arr = []
safely do
- ec2_inst = ec2.describe_instances([opts[:id]]).first
- raise "Instance #{opts[:id]} NotFound" if ec2_inst.nil?
+ begin
+ ec2_inst = ec2.describe_instances([opts[:id]]).first
+ rescue => e
+ raise e unless e.message =~ /Invalid id/ or e.message =~ /NotFound/
+ ec2_inst = nil
+ end
+ return if ec2_inst.nil?
instance = convert_instance(ec2_inst)
return nil unless instance
if ec2_inst[:aws_platform] == 'windows'
@@ -329,8 +344,13 @@ module Deltacloud
ec2 = new_client(credentials)
opts ||= {}
safely do
- ec2.describe_key_pairs(opts[:id] ? [opts[:id]] : nil).collect do |key|
- convert_key(key)
+ begin
+ ec2.describe_key_pairs(opts[:id] ? [opts[:id]] : nil).collect do |key|
+ convert_key(key)
+ end
+ rescue => e
+ raise e unless e.message =~ /does not exist/
+ []
end
end
end
@@ -787,7 +807,7 @@ module Deltacloud
klass.new(credentials.user, credentials.password, {
:server => endpoint || endpoint_for_service(type),
:connection_mode => :per_thread,
- :logger => ENV['RACK_ENV'] == 'test' ? Logger.new('/dev/null') : Logger.new(STDOUT)
+ :logger => ENV['RACK_ENV'] == 'test' ? Logger.new(StringIO.new) : Logger.new(STDOUT)
})
end
--
1.7.10.2