You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by mf...@apache.org on 2010/08/10 10:12:10 UTC

svn commit: r983878 - in /incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid: gogrid_client.rb gogrid_driver.rb test.rb

Author: mfojtik
Date: Tue Aug 10 08:12:09 2010
New Revision: 983878

URL: http://svn.apache.org/viewvc?rev=983878&view=rev
Log:
Fixed GoGrid driver

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

Modified: incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/gogrid_client.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/gogrid_client.rb?rev=983878&r1=983877&r2=983878&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/gogrid_client.rb (original)
+++ incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/gogrid_client.rb Tue Aug 10 08:12:09 2010
@@ -9,7 +9,7 @@ class GoGridClient
                  apikey='YOUR API KEY',
                  secret='YOUR SHARED SECRET', 
                  format='json',
-                 version='1.4')
+                 version='1.5')
     @server = server
     @secret = secret
     @default_params = {'format'=>format, 'v'=>version,'api_key' => apikey}
@@ -30,8 +30,17 @@ class GoGridClient
     open(getRequestURL(method,params)).read
   end
 
-  def request(method, params={})
-    JSON::parse(sendAPIRequest(method, params))
+  def request(method, params={}, version=nil)
+    if version
+      @default_params['v'] = version
+    else
+      @default_params['v'] = '1.5'
+    end
+    begin
+      JSON::parse(sendAPIRequest(method, params))
+    rescue Exception => e
+      STDERR.puts("ERROR: #{e.message}")
+    end
   end
   
   def encode_params(params)

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=983878&r1=983877&r2=983878&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 Tue Aug 10 08:12:09 2010
@@ -37,34 +37,10 @@ class GogridDriver < Deltacloud::BaseDri
 
   feature :instances, :authentication_password
 
-  define_hardware_profile '512MB' do
-    cpu            0.5
-    memory         512
-    storage        30
-  end
-
-  define_hardware_profile '1GB' do
-    cpu            1
-    memory         1
-    storage        60
-  end
-
-  define_hardware_profile '2GB' do
+  define_hardware_profile 'server' do
     cpu            2
-    memory         2
-    storage        120
-  end
-
-  define_hardware_profile '4GB' do
-    cpu            4
-    memory         4
-    storage        240
-  end
-
-  define_hardware_profile '8GB' do
-    cpu            8
-    memory         8
-    storage        480
+    memory         [512, 1024, 2048, 4096, 8192]
+    storage        10
   end
 
   def supported_collections
@@ -91,31 +67,28 @@ class GogridDriver < Deltacloud::BaseDri
 
   def realms(credentials, opts=nil)
     safely do
-      new_client(credentials).request('common/lookup/list', { 'lookup' => 'image.type' })['list'].collect do |realm|
+      new_client(credentials).request('common/lookup/list', { 'lookup' => 'ip.datacenter' })['list'].collect do |realm|
         convert_realm(realm)
       end
     end
   end
 
   def create_instance(credentials, image_id, opts=nil)
-    image = image(credentials, :id => image_id )
-    if opts && opts[:hwp_id]
-      hwp = find_hardware_profile(credentials, opts[:hwp_id], image.id)
+    server_ram = nil
+    if opts[:hwp_memory]
+      mem = opts[:hwp_memory].to_i
+      server_ram = (mem == 512) ? "512MB" : "#{mem / 1024}GB"
     else
-      hwp = find_hardware_profile(credentials, "512MB", image.id)
+      server_ram = "512MB"
     end
-
     client = new_client(credentials)
     name = (opts[:name] && opts[:name]!='') ? opts[:name] : get_random_instance_name
-    if name.length > 20
-      raise Deltacloud::BackendError.new(400, "name-too-long", "Name '#{name}' is too long; the maximum for GoGrid is 20 characters", nil)
-    end
     safely do
       instance = client.request('grid/server/add', {
         'name' => name,
         'image' => image_id,
-        'server.ram' => hwp.name,
-        'ip' => get_next_free_ip(credentials)
+        'server.ram' => server_ram,
+        'ip' => get_free_ip_from_realm(credentials, opts[:realm_id] || '1')
       })['list'].first
       if instance
         login_data = get_login_data(client, instance[:id])
@@ -147,6 +120,7 @@ class GogridDriver < Deltacloud::BaseDri
   end
 
   def instances(credentials, opts=nil)
+    require 'ap'
     instances = []
     if opts and opts[:id]
       begin
@@ -166,7 +140,7 @@ class GogridDriver < Deltacloud::BaseDri
         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 and filtering on the id.  This could
+          # 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])
@@ -181,25 +155,25 @@ class GogridDriver < Deltacloud::BaseDri
 
   def reboot_instance(credentials, id)
     safely do
-      new_client(credentials).request('grid/server/power', { 'id' => id, 'power' => 'reboot'})
+      new_client(credentials).request('grid/server/power', { 'name' => id, 'power' => 'reboot'})
     end
   end
 
   def destroy_instance(credentials, id)
     safely do
-      new_client(credentials).request('grid/server/delete', { 'id' => id})
+      new_client(credentials).request('grid/server/delete', { 'name' => id})
     end
   end
 
   def stop_instance(credentials, id)
     safely do
-      new_client(credentials).request('grid/server/power', { 'id' => id, 'power' => 'off'})
+      new_client(credentials).request('grid/server/power', { 'name' => id, 'power' => 'off'})
     end
   end
 
   def start_instance(credentials, id)
     safely do
-      new_client(credentials).request('grid/server/power', { 'id' => id, 'power' => 'on'})
+      new_client(credentials).request('grid/server/power', { 'name' => id, 'power' => 'on'})
     end
   end
 
@@ -210,8 +184,10 @@ class GogridDriver < Deltacloud::BaseDri
   def keys(credentials, opts=nil)
     gogrid = new_client( credentials )
     creds = []
-    gogrid.request('support/password/list')['list'].each do |password|
-      creds << convert_key(password)
+    safely do
+      gogrid.request('support/password/list')['list'].each do |password|
+        creds << convert_key(password)
+      end
     end
     return creds
   end
@@ -229,6 +205,7 @@ class GogridDriver < Deltacloud::BaseDri
 
   def new_client(credentials)
     GoGridClient.new('https://api.gogrid.com/api', credentials.user, credentials.password)
+
   end
 
   def get_login_data(client, instance_id)
@@ -288,7 +265,16 @@ class GogridDriver < Deltacloud::BaseDri
   end
 
   def convert_instance(instance, owner_id)
-    hwp_name = instance['image']['name']
+    opts = {}
+    unless instance['ram']['id'] == "1"
+      mem = instance['ram']['name']
+      if mem == "512MB"
+        opts[:hwp_memory] = "512"
+      else
+        opts[:hwp_memory] = (mem.to_i * 1024).to_s
+      end
+    end
+    prof = InstanceProfile.new("server", opts)
 
     Instance.new(
        # note that we use 'name' as the id here, because newly created instances
@@ -298,9 +284,9 @@ class GogridDriver < Deltacloud::BaseDri
       :id => instance['name'],
       :owner_id => owner_id,
       :image_id => instance['image']['id'],
-      :instance_profile => InstanceProfile.new(hwp_name),
+      :instance_profile => prof,
       :name => instance['name'],
-      :realm_id => instance['type']['id'],
+      :realm_id => instance['ip']['datacenter']['id'],
       :state => convert_server_state(instance['state']['name'], instance['id']),
       :actions => instance_actions_for(convert_server_state(instance['state']['name'], instance['id'])),
       :public_addresses => [ instance['ip']['ip'] ],
@@ -319,12 +305,13 @@ class GogridDriver < Deltacloud::BaseDri
     state.eql?('Off') ? 'STOPPED' : 'RUNNING'
   end
 
-  def get_next_free_ip(credentials)
+  def get_free_ip_from_realm(credentials, realm_id)
     ip = ""
     safely do
       ip = new_client(credentials).request('grid/ip/list', {
         'ip.type' => '1',
-        'ip.state' => '1'
+        'ip.state' => '1',
+        'datacenter' => realm_id
       })['list'].first['ip']
     end
     return ip

Added: incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/test.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/test.rb?rev=983878&view=auto
==============================================================================
--- incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/test.rb (added)
+++ incubator/deltacloud/trunk/server/lib/deltacloud/drivers/gogrid/test.rb Tue Aug 10 08:12:09 2010
@@ -0,0 +1,13 @@
+require 'gogrid_client'
+require 'ap'
+
+user='fbb1de3897597ccf'
+password='ngieth10'
+
+client=GoGridClient.new('https://api.gogrid.com/api', user, password)
+
+ap client.request('grid/ip/list', {
+  'ip.type' => '1',
+  'ip.state' => '1',
+  'datacenter' => '1'
+})