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