Simon COURTOIS
2010-Aug-26 09:17 UTC
[Ovirt-devel] [PATCH] Adding the ability to select a Host to start a VM
Signed-off-by: Simon COURTOIS <scourtois at linagora.com> --- src/app/controllers/vm_controller.rb | 5 ++ src/app/models/vm_task.rb | 4 +- src/app/views/vm/start.rhtml | 77 ++++++++++++++++++++++++++++++++++ src/task-omatic/taskomatic.rb | 7 +++- 4 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 src/app/views/vm/start.rhtml diff --git a/src/app/controllers/vm_controller.rb b/src/app/controllers/vm_controller.rb index f4a90b9..1b77db0 100644 --- a/src/app/controllers/vm_controller.rb +++ b/src/app/controllers/vm_controller.rb @@ -130,6 +130,11 @@ class VmController < ApplicationController render :json => { :object => "vm", :success => true, :alert => alert } end + def start + @vm = Vm.find(params[:id]) + render :layout => 'popup' + end + def migrate svc_get_for_migrate(params[:id]) render :layout => 'popup' diff --git a/src/app/models/vm_task.rb b/src/app/models/vm_task.rb index 649001d..b8da529 100644 --- a/src/app/models/vm_task.rb +++ b/src/app/models/vm_task.rb @@ -56,7 +56,9 @@ class VmTask < Task :success => Vm::STATE_RUNNING, :failure => Vm::STATE_STOPPED, :privilege => [Privilege::VM_CONTROL, - PRIV_OBJECT_VM_POOL]}, + PRIV_OBJECT_VM_POOL], + :popup_action => 'start'}, + ACTION_SHUTDOWN_VM => { :label => "Shutdown", :icon => "icon_stop_11px.png", :start => Vm::STATE_RUNNING, diff --git a/src/app/views/vm/start.rhtml b/src/app/views/vm/start.rhtml new file mode 100644 index 0000000..bed1d2d --- /dev/null +++ b/src/app/views/vm/start.rhtml @@ -0,0 +1,77 @@ +<%- content_for :title do -%> + Start Virtual Machine +<%- end -%> +<%- content_for :description do -%> + Please choose a Host to start the Virtual Machine. Leave the selection blank to allow oVirt to choose the most appropriate starting host. +<%- end -%> +<div class="panel_header"></div> + +<form method="POST" id="start_vm_form" action="<%= url_for :action => 'vm_action' %>"> + <div class="dialog_form"> + <%= error_messages_for 'start_vm' %> + + <%= render :partial => '/host/grid', :locals => { + :table_id => 'start_vm_grid', + :hwpool => @vm.get_hardware_pool, + :exclude_pool => nil, + :exclude_host => nil, + :is_popup => true, + :checkboxes => false, + :on_select => 'start_vm_select', + :on_deselect => 'start_vm_deselect', + :on_hover => 'load_widget_hover', + :on_unhover => 'load_widget_unhover' + } %> + + <% form_tag do %> + <!--[form:start_vm]--> + <%= hidden_field_tag 'id', @vm.id %> + <%= hidden_field_tag 'vm_action', VmTask::ACTION_START_VM %> + Selected Migration Target: + <div id='selected_starting_host'> + <div class="selection_left"> + <div>No starting host selected.</div> + </div> + </div> + <%= hidden_field_tag 'vm_action_data', "" %> + <% end %> + </div> + <%= popup_footer("$('#start_vm_form').submit()", "Start Virtual Machine") %> +</form> +<script type="text/javascript"> + $(function() { + + $('#start_vm_form').ajaxForm({ + dataType: 'json', + success: afterVm + }); + + }); + + function start_vm_select(selected_rows) { + var selected_ids = new Array(); + for (i=0; i<selected_rows.length; i++) { + load_widget_select(selected_rows[i]); + selected_ids[i] = selected_rows[i].id; + } + if (selected_ids.length == 1) { + $('#selected_starting_host') + .load('<%= url_for :controller => "host", :action => "quick_summary" %>', + { id: parseInt(selected_ids[0].substring(3)) }); + $('#vm_action_data').val(selected_ids[0].substring(3)); + } + } + + function start_vm_deselect(selected_rows) { + var selected_ids = new Array() + for (i=0; i<selected_rows.length; i++) { + load_widget_deselect(selected_rows[i]); + selected_ids[i] = selected_rows[i].id; + } + refresh_summary_static('selected_starting_host', + '<div class="selection_left"> \ + <div>No starting host selected.</div> \ + </div>'); + $('#vm_action_data').val(''); + } +</script> diff --git a/src/task-omatic/taskomatic.rb b/src/task-omatic/taskomatic.rb index 31c38e3..8e80115 100755 --- a/src/task-omatic/taskomatic.rb +++ b/src/task-omatic/taskomatic.rb @@ -354,7 +354,12 @@ class TaskOmatic raise "Virtual machine is currently paused, cannot start, must resume." end end - db_host = find_capable_host(db_vm) + + if task.args + db_host = db_vm.vm_resource_pool.get_hardware_pool.hosts.find(task.args) + else + db_host = find_capable_host(db_vm) + end node = @qmfc.object(:class => "node", 'hostname' => db_host.hostname) -- 1.7.2.1
Arthur Clément
2010-Sep-01 13:06 UTC
[Ovirt-devel] [PATCH] Adding the ability to select a Host to start a VM
ACK and pushed On jeudi 26 ao?t 2010 11:17:23 Simon COURTOIS wrote:> Signed-off-by: Simon COURTOIS <scourtois at linagora.com> > --- > src/app/controllers/vm_controller.rb | 5 ++ > src/app/models/vm_task.rb | 4 +- > src/app/views/vm/start.rhtml | 77 > ++++++++++++++++++++++++++++++++++ src/task-omatic/taskomatic.rb | > 7 +++- > 4 files changed, 91 insertions(+), 2 deletions(-) > create mode 100644 src/app/views/vm/start.rhtml > > diff --git a/src/app/controllers/vm_controller.rb > b/src/app/controllers/vm_controller.rb index f4a90b9..1b77db0 100644 > --- a/src/app/controllers/vm_controller.rb > +++ b/src/app/controllers/vm_controller.rb > @@ -130,6 +130,11 @@ class VmController < ApplicationController > render :json => { :object => "vm", :success => true, :alert => alert > } end > > + def start > + @vm = Vm.find(params[:id]) > + render :layout => 'popup' > + end > + > def migrate > svc_get_for_migrate(params[:id]) > render :layout => 'popup' > diff --git a/src/app/models/vm_task.rb b/src/app/models/vm_task.rb > index 649001d..b8da529 100644 > --- a/src/app/models/vm_task.rb > +++ b/src/app/models/vm_task.rb > @@ -56,7 +56,9 @@ class VmTask < Task > > :success => Vm::STATE_RUNNING, > :failure => Vm::STATE_STOPPED, > :privilege => > :[Privilege::VM_CONTROL, > > - > PRIV_OBJECT_VM_POOL]}, + > PRIV_OBJECT_VM_POOL], + > :popup_action => 'start'}, > + > ACTION_SHUTDOWN_VM => { :label => "Shutdown", > > :icon => "icon_stop_11px.png", > :start => Vm::STATE_RUNNING, > > diff --git a/src/app/views/vm/start.rhtml b/src/app/views/vm/start.rhtml > new file mode 100644 > index 0000000..bed1d2d > --- /dev/null > +++ b/src/app/views/vm/start.rhtml > @@ -0,0 +1,77 @@ > +<%- content_for :title do -%> > + Start Virtual Machine > +<%- end -%> > +<%- content_for :description do -%> > + Please choose a Host to start the Virtual Machine. Leave the selection > blank to allow oVirt to choose the most appropriate starting host. +<%- > end -%> > +<div class="panel_header"></div> > + > +<form method="POST" id="start_vm_form" action="<%= url_for :action => > 'vm_action' %>"> + <div class="dialog_form"> > + <%= error_messages_for 'start_vm' %> > + > + <%= render :partial => '/host/grid', :locals => { > + :table_id => 'start_vm_grid', > + :hwpool => @vm.get_hardware_pool, > + :exclude_pool => nil, > + :exclude_host => nil, > + :is_popup => true, > + :checkboxes => false, > + :on_select => 'start_vm_select', > + :on_deselect => 'start_vm_deselect', > + :on_hover => 'load_widget_hover', > + :on_unhover => 'load_widget_unhover' > + } %> > + > + <% form_tag do %> > + <!--[form:start_vm]--> > + <%= hidden_field_tag 'id', @vm.id %> > + <%= hidden_field_tag 'vm_action', VmTask::ACTION_START_VM %> > + Selected Migration Target: > + <div id='selected_starting_host'> > + <div class="selection_left"> > + <div>No starting host selected.</div> > + </div> > + </div> > + <%= hidden_field_tag 'vm_action_data', "" %> > + <% end %> > + </div> > + <%= popup_footer("$('#start_vm_form').submit()", "Start Virtual > Machine") %> +</form> > +<script type="text/javascript"> > + $(function() { > + > + $('#start_vm_form').ajaxForm({ > + dataType: 'json', > + success: afterVm > + }); > + > + }); > + > + function start_vm_select(selected_rows) { > + var selected_ids = new Array(); > + for (i=0; i<selected_rows.length; i++) { > + load_widget_select(selected_rows[i]); > + selected_ids[i] = selected_rows[i].id; > + } > + if (selected_ids.length == 1) { > + $('#selected_starting_host') > + .load('<%= url_for :controller => "host", :action => > "quick_summary" %>', + { id: > parseInt(selected_ids[0].substring(3)) }); > + $('#vm_action_data').val(selected_ids[0].substring(3)); > + } > + } > + > + function start_vm_deselect(selected_rows) { > + var selected_ids = new Array() > + for (i=0; i<selected_rows.length; i++) { > + load_widget_deselect(selected_rows[i]); > + selected_ids[i] = selected_rows[i].id; > + } > + refresh_summary_static('selected_starting_host', > + '<div class="selection_left"> \ > + <div>No starting host selected.</div> \ > + </div>'); > + $('#vm_action_data').val(''); > + } > +</script> > diff --git a/src/task-omatic/taskomatic.rb b/src/task-omatic/taskomatic.rb > index 31c38e3..8e80115 100755 > --- a/src/task-omatic/taskomatic.rb > +++ b/src/task-omatic/taskomatic.rb > @@ -354,7 +354,12 @@ class TaskOmatic > raise "Virtual machine is currently paused, cannot start, must > resume." end > end > - db_host = find_capable_host(db_vm) > + > + if task.args > + db_host > db_vm.vm_resource_pool.get_hardware_pool.hosts.find(task.args) + else > + db_host = find_capable_host(db_vm) > + end > > node = @qmfc.object(:class => "node", 'hostname' => db_host.hostname)-- Arthur CLEMENT Linagora Paris