You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by lu...@apache.org on 2010/07/09 01:46:21 UTC

svn commit: r962324 - /incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb

Author: lutter
Date: Thu Jul  8 23:46:21 2010
New Revision: 962324

URL: http://svn.apache.org/viewvc?rev=962324&view=rev
Log:
Deal with newly created instances in GoGrid.

>From my use of the GoGrid API, it seems there is a
problem searching for newly created instances.  In
particular, trying to do a grid/server/get on them
doesn't actually work until they are more initialized
in the backend.  Deal with this by falling back to a
full listing in the case we get a Bad Request from
the backend.

Signed-off-by: Chris Lalancette <cl...@redhat.com>

Modified:
    incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb

Modified: incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb?rev=962324&r1=962323&r2=962324&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb (original)
+++ incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb Thu Jul  8 23:46:21 2010
@@ -114,12 +114,24 @@ class GogridDriver < Deltacloud::BaseDri
     end
   end
 
+  def list_instances(credentials, id)
+    instances = []
+    safely do
+      new_client(credentials).request('grid/server/list')['list'].collect do |instance|
+        if id.nil? or instance['name'] == id
+          instances << convert_instance(instance, credentials.user)
+        end
+      end
+    end
+    instances
+  end
+
   def instances(credentials, opts=nil)
     instances = []
     if opts and opts[:id]
-      safely do
+      begin
         client = new_client(credentials)
-        instance = client.request('grid/server/get', { 'id' => opts[:id] })['list'].first
+        instance = client.request('grid/server/get', { 'name' => opts[:id] })['list'].first
         login_data = get_login_data(client, instance['id'])
         if login_data['username'] and login_data['password']
           instance['username'] = login_data['username']
@@ -130,13 +142,18 @@ class GogridDriver < Deltacloud::BaseDri
           inst.authn_error = "Unable to fetch password"
         end
         instances = [inst]
-      end
-    else
-      safely do
-        instances = new_client(credentials).request('grid/server/list')['list'].collect do |instance|
-          convert_instance(instance, credentials.user)
+      rescue Exception => e
+        if e.message == "400 Bad Request"
+          # in the case of a VM that we just made, the grid/server/get method
+          # throws a "400 Bad Request error".  In this case we try again by
+          # getting a full listing a filtering on the id.  This could
+          # potentially take a long time, but I don't see another way to get
+          # information about a newly created instance
+          instances = list_instances(credentials, opts[:id])
         end
       end
+    else
+      instances = list_instances(credentials, nil)
     end
     instances = filter_on( instances, :state, opts )
     instances