You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by ma...@redhat.com on 2012/07/11 14:35:44 UTC

[PATCH] Updates for Opennebula driver - brings compatibility for ON 3.6 Many thanks to Daniel Molina dmolina@opennebula.org

From: marios <ma...@redhat.com>


Signed-off-by: marios <ma...@redhat.com>
---
 .../deltacloud/drivers/opennebula/occi_client.rb   |   18 ++++++++++++------
 .../drivers/opennebula/opennebula_driver.rb        |   18 +++++-------------
 2 files changed, 17 insertions(+), 19 deletions(-)

diff --git a/server/lib/deltacloud/drivers/opennebula/occi_client.rb b/server/lib/deltacloud/drivers/opennebula/occi_client.rb
index 8688995..7d71962 100644
--- a/server/lib/deltacloud/drivers/opennebula/occi_client.rb
+++ b/server/lib/deltacloud/drivers/opennebula/occi_client.rb
@@ -83,8 +83,8 @@ module OCCIClient
     ######################################################################
     # Retieves the pool of Virtual Machines
     ######################################################################
-    def get_vms
-      get('/compute')
+    def get_vms(verbose=false)
+      get('/compute', verbose)
     end
 
     ######################################################################
@@ -196,8 +196,8 @@ module OCCIClient
     ######################################################################
     # Retieves the pool of Images owned by the user
     ######################################################################
-    def get_images
-      get('/storage')
+    def get_images(verbose=false)
+      get('/storage', verbose)
     end
 
 
@@ -275,10 +275,16 @@ module OCCIClient
 
     private
 
-    def get(path)
+    def get(path, verbose=false)
       url = URI.parse(@endpoint+path)
+
+      params = []
+      params << "verbose=true" if verbose
+      params << "#{url.query}" if url.query
+
       path = url.path
-      path << "?#{url.query}" if url.query
+      path << "?#{params.join('&')}"
+
       req = Net::HTTP::Get.new(path)
 
       do_request(url, req)
diff --git a/server/lib/deltacloud/drivers/opennebula/opennebula_driver.rb b/server/lib/deltacloud/drivers/opennebula/opennebula_driver.rb
index b44482e..c9421b3 100644
--- a/server/lib/deltacloud/drivers/opennebula/opennebula_driver.rb
+++ b/server/lib/deltacloud/drivers/opennebula/opennebula_driver.rb
@@ -84,13 +84,11 @@ class OpennebulaDriver < Deltacloud::BaseDriver
   def images(credentials, opts=nil)
     occi_client = new_client(credentials)
 
-    xml = treat_response(occi_client.get_images)
+    xml = treat_response(occi_client.get_images(true))
 
     # TBD Add extended info in the pool
     images = REXML::Document.new(xml).root.elements.map do |d|
-      im_id = d.attributes['href'].split("/").last
-      storage = treat_response(occi_client.get_image(im_id))
-      convert_image(storage, credentials)
+      convert_image(d, credentials)
     end
   end
 
@@ -156,13 +154,10 @@ class OpennebulaDriver < Deltacloud::BaseDriver
   def instances(credentials, opts=nil)
     occi_client = new_client(credentials)
 
-    xml = treat_response(occi_client.get_vms)
-
+    xml = treat_response(occi_client.get_vms(true))
     # TBD Add extended info in the pool
     instances = REXML::Document.new(xml).root.elements.map do |d|
-      vm_id = d.attributes['href'].split("/").last
-      computexml = treat_response(occi_client.get_vm(vm_id))
-      convert_instance(computexml, credentials)
+      convert_instance(d, credentials)
     end
 
     instances = filter_on( instances, :state, opts )
@@ -235,10 +230,8 @@ class OpennebulaDriver < Deltacloud::BaseDriver
     } )
   end
 
-
   def convert_instance(computexml, credentials)
-    compute = REXML::Document.new(computexml)
-    computehash = compute.root.elements
+    computehash = REXML::Document.new(computexml.to_s).root.elements
 
     network = []
     computehash.each('NIC/IP') {|ip| network<<InstanceAddress.new(ip.text, :type => :ipv4)}
@@ -247,7 +240,6 @@ class OpennebulaDriver < Deltacloud::BaseDriver
     if computehash['DISK/STORAGE']
       image_id = computehash['DISK/STORAGE'].attributes['href'].split("/").last
     end
-
     Instance.new( {
       :id=>computehash['ID'].text,
       :owner_id=>credentials.user,
-- 
1.7.6.5