From: Michal Fojtik <[email protected]> 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 <[email protected]> --- 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
