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 2011/01/04 13:06:16 UTC

[PATCH core 5/5] Added support for IP reporting (both VNC and NIC)

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

---
 .../lib/deltacloud/drivers/rhevm/rhevm_client.rb   |   24 +++++++++++++++++++-
 .../lib/deltacloud/drivers/rhevm/rhevm_driver.rb   |   24 +++++++++++++++----
 server/views/instances/show.xml.haml               |   12 ++++++---
 3 files changed, 50 insertions(+), 10 deletions(-)

diff --git a/server/lib/deltacloud/drivers/rhevm/rhevm_client.rb b/server/lib/deltacloud/drivers/rhevm/rhevm_client.rb
index 55f54a4..92ad758 100644
--- a/server/lib/deltacloud/drivers/rhevm/rhevm_client.rb
+++ b/server/lib/deltacloud/drivers/rhevm/rhevm_client.rb
@@ -139,7 +139,7 @@ module RHEVM
 
   class Vm < BaseModel
     attr_accessor(:status, :memory, :sockets, :cores, :bootdevs, :host, :cluster, :template, :vmpool, :profile)
-    attr_accessor(:creation_time, :storage)
+    attr_accessor(:creation_time, :storage, :nics, :display)
 
     def initialize(client, xml)
       super(client, xml)
@@ -161,7 +161,29 @@ module RHEVM
       disks_response = Nokogiri::XML(client.get("#{client.host}#{storage_link}"))
       @storage = disks_response.xpath('disks/disk/size').collect { |s| s.text.to_f }
       @storage = @storage.inject(nil) { |p, i| p ? p+i : i }
+      @display = {
+        :type => (xml/'display/type').text,
+        :address => (xml/'display/address').text,
+        :port => (xml/'display/port').text
+      } if (xml/'display')
+      @nics = get_nics(client, xml)
+      self
     end
+
+    private
+
+    def get_nics(client, xml)
+      nics = []
+      doc = Nokogiri::XML(client.get(client.host + (xml/'link[@rel="nics"]').first[:href]))
+      (doc/'nics/nic').each do |nic|
+        nics << {
+          :mac => (nic/'mac').first[:address],
+          :address => (nic/'ip').first ? (nic/'ip').first[:address]  : nil
+        }
+      end
+      nics
+    end
+
   end
 
   class Template < BaseModel
diff --git a/server/lib/deltacloud/drivers/rhevm/rhevm_driver.rb b/server/lib/deltacloud/drivers/rhevm/rhevm_driver.rb
index 740ed9e..8b4282f 100644
--- a/server/lib/deltacloud/drivers/rhevm/rhevm_driver.rb
+++ b/server/lib/deltacloud/drivers/rhevm/rhevm_driver.rb
@@ -214,9 +214,21 @@ class RHEVMDriver < Deltacloud::BaseDriver
                                    :hwp_cpu => inst.cores,
                                    :hwp_storage => "#{storage_size}"
     )
-    # TODO: Implement public_addresses (nics/ip)
-    # NOTE: This must be enabled on 'guest' side, otherwise this property is not
-    # available through RHEV-M API
+    # Include VNC and SPICE addresses
+    if inst.display
+      display_address = { 
+        :type => inst.display[:type],
+        :address => inst.display[:address],
+        :port => inst.display[:port]
+      }
+    end
+    public_addresses = []
+    unless inst.nics.empty?
+      inst.nics.each do |nic|
+        public_addresses << { :address => nic[:address], :mac => nic[:mac]}
+      end
+    end
+    public_addresses << display_address if display_address
     Instance.new(
       :id => inst.id,
       :name => inst.name,
@@ -227,7 +239,9 @@ class RHEVMDriver < Deltacloud::BaseDriver
       :launch_time => inst.creation_time,
       :instance_profile => profile,
       :hardware_profile_id => profile.id,
-      :actions=>instance_actions_for( state )
+      :actions=>instance_actions_for( state ),
+      :public_addresses => public_addresses,
+      :private_addresses => []
     )
   end
 
@@ -269,7 +283,7 @@ class RHEVMDriver < Deltacloud::BaseDriver
       :description => img.description,
       :owner_id => client.username,
       :architecture => 'x86_64', # All RHEV-M VMs are x86_64
-      :status => img.status
+      :state => img.status
     )
   end
 
diff --git a/server/views/instances/show.xml.haml b/server/views/instances/show.xml.haml
index c31a215..27cf77f 100644
--- a/server/views/instances/show.xml.haml
+++ b/server/views/instances/show.xml.haml
@@ -25,12 +25,16 @@
     %launch_time<
       =@instance.launch_time
   - if @instance.public_addresses
-    %public_addresses
+    %public_addresses<
       - @instance.public_addresses.each do |address|
-        %address<
-          =address
+        - if address.class.eql?(Hash) and address[:address]!=""
+          %address{ :port => address[:port], :type => address[:type], :mac => address[:mac] }<
+            =address[:address]
+        - elsif address.class.eql?(String)
+          %address<
+            =address
   - if @instance.private_addresses
-    %private_addresses
+    %private_addresses<
       - @instance.private_addresses.each do |address|
         %address<
           =address
-- 
1.7.3.3