incubator-deltacloud-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mfoj...@redhat.com
Subject [PATCH core] RHEV-M fixes (realms, client). Instance UI enhancements (images, ID shortening)
Date Mon, 28 Feb 2011 09:43:20 GMT
From: Michal Fojtik <mfojtik@redhat.com>

---
 server/bin/deltacloudd                             |    1 +
 server/config/drivers.yaml                         |    3 ++
 .../lib/deltacloud/drivers/rhevm/rhevm_client.rb   |   24 +++++++++++++++++--
 .../lib/deltacloud/drivers/rhevm/rhevm_driver.rb   |   20 +++++++++-------
 .../lib/deltacloud/helpers/application_helper.rb   |   12 ++++++++++
 server/public/images/pending.png                   |  Bin 0 -> 792 bytes
 server/public/images/running.png                   |  Bin 0 -> 740 bytes
 server/public/images/stopped.png                   |  Bin 0 -> 779 bytes
 server/views/instances/index.html.haml             |    6 ++--
 9 files changed, 51 insertions(+), 15 deletions(-)
 create mode 100644 server/public/images/pending.png
 create mode 100644 server/public/images/running.png
 create mode 100644 server/public/images/stopped.png

diff --git a/server/bin/deltacloudd b/server/bin/deltacloudd
index 70be6ca..addb1f5 100755
--- a/server/bin/deltacloudd
+++ b/server/bin/deltacloudd
@@ -105,6 +105,7 @@ else
   argv_opts << ['--rackup', 'config.ru' ]
   argv_opts << ['--chdir', dirname ]
   argv_opts << ['-e', options[:env] ]
+  argv_opts << ['--timeout', '60']
   argv_opts << ['--threaded', '-D', '--stats', '/stats']
 
   argv_opts.flatten!
diff --git a/server/config/drivers.yaml b/server/config/drivers.yaml
index 3f34521..d028ca0 100644
--- a/server/config/drivers.yaml
+++ b/server/config/drivers.yaml
@@ -5,6 +5,9 @@
   :name: Mock
 :rhevm: 
   :name: RHEVM
+  :entrypoints:
+    default:
+      default: "https://rhev-dc.lab.eng.brq.redhat.com:8443/rhevm-api-powershell"
 :rimuhosting: 
   :name: RimuHosting
 :opennebula: 
diff --git a/server/lib/deltacloud/drivers/rhevm/rhevm_client.rb b/server/lib/deltacloud/drivers/rhevm/rhevm_client.rb
index 09c025f..c1c7161 100644
--- a/server/lib/deltacloud/drivers/rhevm/rhevm_client.rb
+++ b/server/lib/deltacloud/drivers/rhevm/rhevm_client.rb
@@ -25,6 +25,15 @@ require 'json'
 module RHEVM
 
   class FixtureNotFound < Exception; end
+  class ConnectionError < StandardError
+    attr_reader :code, :cause, :details
+    def initialize(code, cause, message, details)
+      super(message)
+      @code = code
+      @cause = cause
+      @details = details
+    end
+  end
 
   class Client
 
@@ -51,7 +60,7 @@ module RHEVM
       opts ||= {}
       if @@COLLECTIONS.include?(method_name.to_sym)
         if opts[:id]
-          object = Nokogiri::XML(get("#{@entry_points[method_name.to_s]}#{opts[:id]}"))
+          object = Nokogiri::XML(get("#{@entry_points[method_name.to_s]}/#{opts[:id]}"))
           element = method_name.to_s
           element = 'data_centers' if method_name.eql?(:datacenters)
           @current_element = element
@@ -105,7 +114,12 @@ module RHEVM
       if ENV['RACK_ENV'] == 'test'
         response = mock_request(:get, uri, {}, headers)
       else
-        response = RestClient.get(uri, headers).to_s
+        puts "[RHEV-M] #{uri}"
+        begin
+          response = RestClient.get(uri, headers).to_s
+        rescue Exception => e
+          raise ConnectionError::new(500, "GET #{uri}", "#{e.message} (GET #{uri})", e.backtrace)
+        end
       end
       response
     end
@@ -127,7 +141,11 @@ module RHEVM
 
     def discover_entry_points()
       return if @discovered
-      doc = Nokogiri.XML(get(@base_uri))
+      begin
+        doc = Nokogiri.XML(get(@base_uri))
+      rescue Exception => e
+        raise ConnectionError::new(500, "RHEV-M Connection Error (#{@base_uri})", "#{e.message}
(#{@base_uri})", e.backtrace)
+      end
       doc.xpath('api/link').each() do |link|
         @entry_points[link['rel']] = @host + link['href']
       end
diff --git a/server/lib/deltacloud/drivers/rhevm/rhevm_driver.rb b/server/lib/deltacloud/drivers/rhevm/rhevm_driver.rb
index 8b4282f..3fd5365 100644
--- a/server/lib/deltacloud/drivers/rhevm/rhevm_driver.rb
+++ b/server/lib/deltacloud/drivers/rhevm/rhevm_driver.rb
@@ -72,7 +72,7 @@ class RHEVMDriver < Deltacloud::BaseDriver
   # or setting provider using HTTP header X-Deltacloud-Provider to URL.
   #
   def provider_uri
-    'https://10.34.2.122:8443/rhevm-api-powershell'
+    Deltacloud::Drivers::driver_config[:rhevm][:entrypoints]['default']['default']
   end
 
   define_instance_states do
@@ -203,7 +203,9 @@ class RHEVMDriver < Deltacloud::BaseDriver
 
   def new_client(credentials)
     url = (Thread.current[:provider] || ENV['API_PROVIDER'] || provider_uri)
-    ::RHEVM::Client.new(credentials.user, credentials.password, url)
+    safely do
+      ::RHEVM::Client.new(credentials.user, credentials.password, url)
+    end
   end
 
   def convert_instance(client, inst)
@@ -299,13 +301,13 @@ class RHEVMDriver < Deltacloud::BaseDriver
   # Disabling this error catching will lead to more verbose messages
   # on console (eg. response from RHEV-M API (so far I didn't figure our
   # how to pass those message to our exception handling tool)
-  #def catched_exceptions_list
-  #  {
-  #    :auth => RestClient::Unauthorized,
-  #    :error => RestClient::InternalServerError,
-  #    :glob => [ /RestClient::(\w+)/ ]
-  #  }
-  #end
+  def catched_exceptions_list
+    {
+      :auth => RestClient::Unauthorized,
+      :error => RestClient::InternalServerError,
+      :glob => [ /(RestClient|RHEVM)::(\w+)/ ]
+    }
+  end
 
 end
 
diff --git a/server/lib/deltacloud/helpers/application_helper.rb b/server/lib/deltacloud/helpers/application_helper.rb
index f1909b2..191a0c9 100644
--- a/server/lib/deltacloud/helpers/application_helper.rb
+++ b/server/lib/deltacloud/helpers/application_helper.rb
@@ -186,4 +186,16 @@ module ApplicationHelper
     end
   end
 
+  def image_for_state(state)
+    state_img = "stopped" if (state!='RUNNING' or state!='PENDING')
+    "<img src='/images/#{state.downcase}.png' title='#{state}'/>"
+  end
+
+  def truncate_words(text, length = 10)
+    return nil unless text
+    return text if text.length<=length
+    end_string = "...#{text[(text.length-(length/2))..text.length]}"
+    "#{text[0..(length/2)]}#{end_string}"
+  end
+
 end
diff --git a/server/public/images/pending.png b/server/public/images/pending.png
new file mode 100644
index 0000000000000000000000000000000000000000..6753441a11065d1e2b10104dd0e59db34842856f
GIT binary patch
literal 792
zcmV+z1LypSP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!x=BPqRCwC#R!>M2Q5gT;%<MnM(RHvj
z6VVDf2$fjW!RQYjB82MDAv$ylT8M5P+EWyi9Xdo2NYtf6bm>qe(qYN4OHpD4LV~g;
zySBEjy0h!%t~1m3y&Yv;(iL~Y%e>{szIpHW?f2uo@B7U%(==f#hX7kV90861M}Sn0
zz!+Qg*cf_o*z{EQ7)(5FLcv2Aegsn=V2kO{RL}X3xU|Y#*7F)x&WMTxh>bU1_0}lL
zrBiJ!u)nDus@x*qSjg${HJX6_kqJm?+LNi9XM(t_+bKZ8<S!f4y3^OX+F>aE2f~pI
zL{m$g(^MltSE~#i4PLkx9)|c#^6AvAvzM1eR4RZ4t~@%b?ra;le)0f3`#uljbBiEh
z^$6DK82B4Y2EZ=A2QKcdg}ZORK=S90W77|UgN6KNMMdah>W<sz+FRkxSQ_G)Jk)wb
zsK(=$T>=NqX^r-XLtN%>yhE{ebb$|C-p+vE50TkCC|2SsJOZBun$sHX5r?=SxjT7m
zrCor-&9JB=ngKG-1V&Z=?_u)m0M2EFMsV99fZuc~XJFL}YbGxiL0pT+>=3{^VLq$#
zW8O&D5VyoXDiUCt3#lP3J=d{aRY5m&SW5%t6a^7}C6hogrG~WGBFtrn!}mvHG4Nmk
z$S#Q&p0@-(UWgLs5SL;o)(!#Lx&Ft43$gLn??*<!OKs<Kf$WjE6B1}nYqUok;!+I7
zmc8DM7!iIch?c<B-X5iSPxqnS&Ct579z3ps6))y>i2P2#r?E-UCP(|G9|l9XJb}>4
z8PP_qm@?IJ*FACJi0@!`5R|%o%b}d2&3?;%?(0pxd;S5RqKJ9Bta#;Rgpd&`q8?Fg
zt$~#&jYuGph>YDYqm@U?UVWCyu%h<QS$CfQU$5g$kM(j$l>|Hg2^|5B06WHC0R{m2
W(HoU0sdYgB0000<MNUMnLSTZ#=yb^d

literal 0
HcmV?d00001

diff --git a/server/public/images/running.png b/server/public/images/running.png
new file mode 100644
index 0000000000000000000000000000000000000000..f74a91436191dc62eb6ad4316c2e6807fb1ed17d
GIT binary patch
literal 740
zcmV<A0vr8_P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!hDk(0RCwC#R^LlgVHkeCbIy*fri-~u
zjM+t$P!K^ELaXe?q91q{{R2VLO$FXqf(WHI1$Gl&RR2J9V?V&WQLJE)6@fxUNL%7G
zQ)hEqTkZ6|=bWh%@eI$2L7Wes?d<)Ym-qS3_kGVhp=lb*IV6;MxB^@Ou7I)&P^<_-
zh@zj(ooJM{phuH%qTpdn5qS*dGiV>|LWDv^?zWNH2`eXDB|tvajXr<X){7?(oyURt
zMtIe2`b0Xrgt2G@FWx^wVlj1p;5u3<{KrWF3Kf4`8w|EwK64YX#A}RCKgB|NPUmd*
z2C#qUIfVR2aPN5s;@@W<4BWt_f(W|;#Ib8QUbn|Lbfu*WucEz}NyZ@YYcH&jkf)Ct
zUkKs)tGL_WiTFgaY4{FCjQX0bL+J5V<JRfJ7w~TCA?8ytRM5#$WtuR-&m7}9<}kM+
zfNsup;ud&?2jRLMm6%G7L7`$YWl3wmF`i=%bA^I1=i0snG*o`o)0sDrWoyL+uDLy`
z69V*OnEVxmB1$tB=86?Pwgu=47BW%D#Mbf_T*=@H;hYm{xfI_1m^1cR-v()Y@EmiP
z%Q<TeX|n>dlcVVUGC>7sRf@8{2)(#saG1+Eoa=;u^!O8u%zs0FWYj32(&h3fE7y>p
zImUC$VJ_!zuI2WYVnp;+N!Z=ghMwvW&Nl1=YHMi4<}Lr71L8Bl$4~V7V|X@v8|@VS
zO89AIM5S6WtrLF2uD#7TN^PK3t-`_O9VSY45g(`>^nD)0ONvYq5>8q1ax)@u_X!Y!
z1fLm$Stv=EC2)gSa=IC<_8E`qa4L%1LDt;!+`nqan;sk0Q0yeT{|Q|I|Am0R0t^5@
WHt<xS!(=1?0000<MNUMnLSTYd-B(%w

literal 0
HcmV?d00001

diff --git a/server/public/images/stopped.png b/server/public/images/stopped.png
new file mode 100644
index 0000000000000000000000000000000000000000..b6cfd0b8f00132d106c0e214e8d0225015feb91e
GIT binary patch
literal 779
zcmV+m1N8ifP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!tw}^dRCwC#R?lk_Q4pT@_D7PosWnX_
zp{4DiSRz%?OOT2ck$Nb^vlr<>v?%@o{R6aDK`KQoh!;;D4D?b&A{8{3fLaKtB{a1f
zj4{UaS7>(goY`z^qO>W^N<i}9BiVW1WWF~uZ#GN_0rgxQ>bx2P8Uh*u>MlU8MqrFp
zJU;jP{4E?NBq7dk4>98CjD^;UFn&244Wp@Iy6rXWShY!5CP11!<C}7}wqEPHa1mU-
z0g##;#)iJJ37P0Tth{^ytGV2x;WyDSGFvG?#^BG|Jf6V7^;=MgeSm!U6=>g*r8IVU
z!R{XdrT;k0Kb(Z@*VOdz+vtsL5w!|n)2I5*9XrwyI(hRp<bzM4u(E{t!0K_cg^EQC
zrGe7b3--Vjc=zBw#8T;@(a6WSQhZTU6Dpmme5dEq2yBIBK*v+_re@#{2XLFM1p1CP
z+9M8ey{dGVe66?z4!gt$54X30o`_>W45ngGS*ZlsaE~~|wQ)X3zBS(hTq-4ye~N>w
z+Cfm-D{n@5y92}05Z6q)YJ~s>jDyJjFit6U3;w&Q3@-T?z7_~DPF%zvm27q>R%u#p
za)B|+CZWh_dL+A%#}e2;#(GP;fcA((T=MyIARSb|)@&+!FOf_E$NEwLNm2f4LbA~w
zafnMk<ZFe1&B^$exy9UiFcMwB0E*F!B_XN-BQt2DJ>n3Te8{(Ib@wxf@WYAdd3^fl
zM8C^9(%0J!Znqmd$ZR1^gLFC#i%ZK8%dF0fMi$1=nn0{p8$|mZ#S-EWqVsCE=WM|1
z8f%xO6JqC@0DRZ<_rYXl>dA8IH9meu{IqHm@4So<%?K9)j}I-T4a`7mh%_RDShxCR
z1Z9U+%n7HK-E(0!9M!z=uU^LoUVFumYjJM;Cu|7#F9iG&U;vZq6mJi1`DFkA002ov
JPDHLkV1j$QW{&^>

literal 0
HcmV?d00001

diff --git a/server/views/instances/index.html.haml b/server/views/instances/index.html.haml
index d728ec5..d0ada19 100644
--- a/server/views/instances/index.html.haml
+++ b/server/views/instances/index.html.haml
@@ -14,17 +14,17 @@
     - @instances.each do |instance|
       %tr
         %td
-          = link_to instance.id, instance_url( instance.id )
+          = link_to truncate_words(instance.id), instance_url( instance.id )
         %td
           = link_to instance.owner_id, images_url
         %td
           = instance.name
         %td
-          = link_to instance.image_id, image_url( instance.image_id )
+          = link_to truncate_words(instance.image_id), image_url( instance.image_id )
         %td
           = instance.hardware_profile ? link_to(instance.hardware_profile, hardware_profile_url(
instance.instance_profile.id )) : 'default'
         %td
-          = instance.state
+          = image_for_state(instance.state)
         %td
           -instance.actions.each do |action|
             =link_to_action action, self.send(:"#{action}_instance_url", instance.id), instance_action_method(action)
-- 
1.7.4


Mime
View raw message