Scott Seago
2008-Jun-12  15:58 UTC
[Ovirt-devel] [PATCH] console plugin integration, first pass.
I added a new attribute to vms, vnc_port that needs to be filled in by
taskomatic when starting/resuming VMs. If vnc_port (and host) are set for a VM,
an 'open console' link appears in the VM details pane which brings up a
(currently 800x600) popup window for the VM console (using the x-gtk-vnc
plugin).
For this to actually work, we need the following:
1) taskomatic changes to fill in vnc_port on start (and null it out when setting
state to stopped, etc)
2) x-gtk-vnc firefox plugin needs to be installed on whatever box you're
using to browse
EDIT: also make sure VM is running before producing console link.
Signed-off-by: Scott Seago <sseago at redhat.com>
---
 wui/src/app/controllers/vm_controller.rb |    7 ++++++-
 wui/src/app/views/vm/show.rhtml          |   10 ++++++++++
 wui/src/db/migrate/006_create_vms.rb     |    1 +
 wui/src/public/stylesheets/layout.css    |    8 +++++++-
 4 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/wui/src/app/controllers/vm_controller.rb
b/wui/src/app/controllers/vm_controller.rb
index 1179196..bda00b6 100644
--- a/wui/src/app/controllers/vm_controller.rb
+++ b/wui/src/app/controllers/vm_controller.rb
@@ -22,7 +22,7 @@ class VmController < ApplicationController
   verify :method => :post, :only => [ :destroy, :create, :update ],
          :redirect_to => { :controller => 'dashboard' }
 
-  before_filter :pre_vm_action, :only => [:vm_action, :cancel_queued_tasks]
+  before_filter :pre_vm_action, :only => [:vm_action, :cancel_queued_tasks,
:console]
 
   def show
     set_perms(@perm_obj)
@@ -171,6 +171,11 @@ class VmController < ApplicationController
     end
   end
 
+  def console
+    @show_vnc_error = "Console is unavailable for VM
#{@vm.description}" unless @vm.host and @vm.vnc_port
+    render :layout => false
+  end
+
   protected
   def pre_new
     # if no vm_resource_pool is passed in, find (or auto-create) it based on
hardware_pool_id
diff --git a/wui/src/app/views/vm/show.rhtml b/wui/src/app/views/vm/show.rhtml
index 457e11a..ff75c47 100644
--- a/wui/src/app/views/vm/show.rhtml
+++ b/wui/src/app/views/vm/show.rhtml
@@ -3,6 +3,16 @@
 <%- end -%>
 
 <%- content_for :action_links do -%>
+  <%if @can_control_vms and (@vm.state == Vm::STATE_RUNNING ) and @vm.host
and @vm.vnc_port -%>
+    <%= link_to image_tag("icon_x.png") + " Open
Console",
+                          {:controller => 'vm', :action =>
'console', :id => @vm},
+                          :id=>"vnc_console_link" %>
+    <script type="text/javascript">
+      $('#vnc_console_link').bind('click', function(){
+             
window.open($(this).attr('href'),'child','toolbar=no,height=600,width=800,
resizable=yes,status=no');
+              return false;})
+    </script>
+  <% end -%>
   <%if @can_modify -%>
     <%= link_to image_tag("icon_edit.png") + " Edit",
                           {:controller => 'vm', :action =>
'edit', :id => @vm},
diff --git a/wui/src/db/migrate/006_create_vms.rb
b/wui/src/db/migrate/006_create_vms.rb
index 7035a3c..74794b6 100644
--- a/wui/src/db/migrate/006_create_vms.rb
+++ b/wui/src/db/migrate/006_create_vms.rb
@@ -32,6 +32,7 @@ class CreateVms < ActiveRecord::Migration
       t.integer :vm_resource_pool_id
       t.integer :needs_restart
       t.string  :boot_device,    :null => false
+      t.integer :vnc_port
       t.integer :lock_version,   :default => 0
     end
     execute "alter table vms add constraint fk_vms_hosts
diff --git a/wui/src/public/stylesheets/layout.css
b/wui/src/public/stylesheets/layout.css
index ab01b5f..52151eb 100644
--- a/wui/src/public/stylesheets/layout.css
+++ b/wui/src/public/stylesheets/layout.css
@@ -376,7 +376,13 @@ a { color:#000000; text-decoration: none;}
 }
 
 .dialog_body {
-  overflow: scroll;
+  overflow: auto;
+  height: 350px;
+}
+
+.popup_body {
+  background: #FFFFFF;
+  overflow: auto;
   height: 350px;
 }
 
-- 
1.5.4.1
Scott Seago
2008-Jun-12  17:14 UTC
[Ovirt-devel] [PATCH] console plugin integration, first pass.
I added a new attribute to vms, vnc_port that needs to be filled in by
taskomatic when starting/resuming VMs. If vnc_port (and host) are set for a VM,
an 'open console' link appears in the VM details pane which brings up a
(currently 800x600) popup window for the VM console (using the x-gtk-vnc
plugin).
For this to actually work, we need the following:
1) taskomatic changes to fill in vnc_port on start (and null it out when setting
state to stopped, etc)
2) x-gtk-vnc firefox plugin needs to be installed on whatever box you're
using to browse
EDIT: also make sure VM is running before producing console link.
EDIT 2: pull out "has console" test into model so that the controller
can also verify in the console handler
Signed-off-by: Scott Seago <sseago at redhat.com>
---
 wui/src/app/controllers/vm_controller.rb |    8 +++++++-
 wui/src/app/models/vm.rb                 |    4 ++++
 wui/src/app/views/vm/show.rhtml          |   10 ++++++++++
 wui/src/db/migrate/006_create_vms.rb     |    1 +
 wui/src/public/stylesheets/layout.css    |    8 +++++++-
 5 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/wui/src/app/controllers/vm_controller.rb
b/wui/src/app/controllers/vm_controller.rb
index 1179196..c12686a 100644
--- a/wui/src/app/controllers/vm_controller.rb
+++ b/wui/src/app/controllers/vm_controller.rb
@@ -22,7 +22,7 @@ class VmController < ApplicationController
   verify :method => :post, :only => [ :destroy, :create, :update ],
          :redirect_to => { :controller => 'dashboard' }
 
-  before_filter :pre_vm_action, :only => [:vm_action, :cancel_queued_tasks]
+  before_filter :pre_vm_action, :only => [:vm_action, :cancel_queued_tasks,
:console]
 
   def show
     set_perms(@perm_obj)
@@ -171,6 +171,12 @@ class VmController < ApplicationController
     end
   end
 
+
+  def console
+    @show_vnc_error = "Console is unavailable for VM
#{@vm.description}" unless @vm.has_console
+    render :layout => false
+  end
+
   protected
   def pre_new
     # if no vm_resource_pool is passed in, find (or auto-create) it based on
hardware_pool_id
diff --git a/wui/src/app/models/vm.rb b/wui/src/app/models/vm.rb
index 3e12d55..ae4e8ff 100644
--- a/wui/src/app/models/vm.rb
+++ b/wui/src/app/models/vm.rb
@@ -180,6 +180,10 @@ class Vm < ActiveRecord::Base
     return true
   end
 
+  def has_console
+    (state == Vm::STATE_RUNNING ) and host and vnc_port
+  end
+
   protected
   def validate
     resources = vm_resource_pool.max_resources_for_vm(self)
diff --git a/wui/src/app/views/vm/show.rhtml b/wui/src/app/views/vm/show.rhtml
index 457e11a..d185dbd 100644
--- a/wui/src/app/views/vm/show.rhtml
+++ b/wui/src/app/views/vm/show.rhtml
@@ -3,6 +3,16 @@
 <%- end -%>
 
 <%- content_for :action_links do -%>
+  <%if @can_control_vms and @vm.has_console -%>
+    <%= link_to image_tag("icon_x.png") + " Open
Console",
+                          {:controller => 'vm', :action =>
'console', :id => @vm},
+                          :id=>"vnc_console_link" %>
+    <script type="text/javascript">
+      $('#vnc_console_link').bind('click', function(){
+             
window.open($(this).attr('href'),'child','toolbar=no,height=600,width=800,
resizable=yes,status=no');
+              return false;})
+    </script>
+  <% end -%>
   <%if @can_modify -%>
     <%= link_to image_tag("icon_edit.png") + " Edit",
                           {:controller => 'vm', :action =>
'edit', :id => @vm},
diff --git a/wui/src/db/migrate/006_create_vms.rb
b/wui/src/db/migrate/006_create_vms.rb
index 7035a3c..74794b6 100644
--- a/wui/src/db/migrate/006_create_vms.rb
+++ b/wui/src/db/migrate/006_create_vms.rb
@@ -32,6 +32,7 @@ class CreateVms < ActiveRecord::Migration
       t.integer :vm_resource_pool_id
       t.integer :needs_restart
       t.string  :boot_device,    :null => false
+      t.integer :vnc_port
       t.integer :lock_version,   :default => 0
     end
     execute "alter table vms add constraint fk_vms_hosts
diff --git a/wui/src/public/stylesheets/layout.css
b/wui/src/public/stylesheets/layout.css
index ab01b5f..52151eb 100644
--- a/wui/src/public/stylesheets/layout.css
+++ b/wui/src/public/stylesheets/layout.css
@@ -376,7 +376,13 @@ a { color:#000000; text-decoration: none;}
 }
 
 .dialog_body {
-  overflow: scroll;
+  overflow: auto;
+  height: 350px;
+}
+
+.popup_body {
+  background: #FFFFFF;
+  overflow: auto;
   height: 350px;
 }
 
-- 
1.5.4.1