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/08/27 14:57:17 UTC

[PATCH core 1/2] OS: Methods should return empty array on unknown entity

From: Michal Fojtik <mf...@redhat.com>

* Methods like instance, images, etc. should return an empty
  array instead of throwing 404 exception.

Signed-off-by: Michal fojtik <mf...@redhat.com>
---
 .../drivers/openstack/openstack_driver.rb          |   40 +++++++++++++-------
 1 file changed, 27 insertions(+), 13 deletions(-)

diff --git a/server/lib/deltacloud/drivers/openstack/openstack_driver.rb b/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
index 2f67a08..5b29840 100644
--- a/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
+++ b/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
@@ -45,8 +45,13 @@ module Deltacloud
           results = []
           safely do
             if opts[:id]
-              flavor = os.flavor(opts[:id])
-              results << convert_from_flavor(flavor)
+              begin
+                flavor = os.flavor(opts[:id])
+                results << convert_from_flavor(flavor)
+              rescue => e
+                raise e unless e.message =~ /The resource could not be found/
+                results = []
+              end
             else
               results = os.flavors.collect do |f|
                 convert_from_flavor(f)
@@ -62,17 +67,20 @@ module Deltacloud
           profiles = hardware_profiles(credentials)
           safely do
             if(opts[:id])
-              img = os.get_image(opts[:id])
-              results << convert_from_image(img, os.connection.authuser)
+              begin
+                img = os.get_image(opts[:id])
+                results << convert_from_image(img, os.connection.authuser)
+              rescue => e
+                raise e unless e.message =~ /Image not found/
+                results = []
+              end
             else
-              results = os.list_images.collect do |img|
-                convert_from_image(img, os.connection.authuser)
+              results = os.list_images.collect do |i|
+                convert_from_image(i, os.connection.authuser)
               end
             end
           end
-          results.each do |img|
-            img.hardware_profiles = profiles
-          end
+          results.each { |img| img.hardware_profiles = profiles }
           filter_on(results, :owner_id, opts)
         end
 
@@ -108,6 +116,7 @@ module Deltacloud
                 end
               end
           end
+          return [] if opts[:id] and opts[:id] != 'default'
           [ Realm.new( { :id=>'default',
                         :name=>'default',
                         :limit => limits,
@@ -119,11 +128,16 @@ module Deltacloud
           insts = []
           safely do
             if opts[:id]
-              server = os.get_server(opts[:id])
-              insts << convert_from_server(server, os.connection.authuser)
+              begin
+                server = os.get_server(opts[:id])
+                insts << convert_from_server(server, os.connection.authuser)
+              rescue => e
+                raise e unless e.message =~ /The resource could not be found/
+                insts = []
+              end
             else
-              insts = os.list_servers_detail.collect do |server|
-                convert_from_server(server, os.connection.authuser)
+              insts = os.list_servers_detail.collect do |s|
+                convert_from_server(s, os.connection.authuser)
               end
             end
           end
-- 
1.7.10.2