Scott Seago
2008-Jun-23 16:02 UTC
[Ovirt-devel] [PATCH] initial support for "clear this VM" UI.
taskomatic bits are not in, so for now taskomatic should just fail these tasks
as 'unknown task type'
Another bit to work out -- what should the logic be for when to show the
'clear this VM' task? Do we need to hide the link when:
1) there's already a pending clear VM task for this host
2) vm is disabled and there are no VMs running
3) vm is unavailable
Signed-off-by: Scott Seago <sseago at redhat.com>
---
wui/src/app/controllers/application.rb | 6 ++-
wui/src/app/controllers/host_controller.rb | 62 +++++++++++++++++++++-------
wui/src/app/views/host/show.rhtml | 14 ++++---
3 files changed, 60 insertions(+), 22 deletions(-)
diff --git a/wui/src/app/controllers/application.rb
b/wui/src/app/controllers/application.rb
index a3a99a0..aa8fd7c 100644
--- a/wui/src/app/controllers/application.rb
+++ b/wui/src/app/controllers/application.rb
@@ -74,7 +74,11 @@ class ApplicationController < ActionController::Base
unless (is_modify_action ? @can_modify : @can_control_vms)
@redir_obj = @perm_obj unless @redir_obj
flash[:notice] = 'You do not have permission to create or modify
this item '
- if @redir_controller
+ if @json_hash
+ @json_hash[:success] = false
+ @json_hash[:alert] = flash[:notice]
+ render :json => @json_hash
+ elsif @redir_controller
redirect_to :controller => @redir_controller, :action =>
'show', :id => @redir_obj
else
redirect_to :action => 'show', :id => @redir_obj
diff --git a/wui/src/app/controllers/host_controller.rb
b/wui/src/app/controllers/host_controller.rb
index 8eb26b9..9e60b1f 100644
--- a/wui/src/app/controllers/host_controller.rb
+++ b/wui/src/app/controllers/host_controller.rb
@@ -23,6 +23,8 @@ class HostController < ApplicationController
render :action => 'list'
end
+ before_filter :pre_action, :only => [:host_action, :enable, :disable,
:clear_vms]
+
# GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
verify :method => :post, :only => [ :destroy, :create, :update ],
:redirect_to => { :action => :list }
@@ -61,6 +63,17 @@ class HostController < ApplicationController
def destroy
end
+ def host_action
+ action = params[:action_type]
+ if["disable", "enable",
"clear_vms"].include?(action)
+ self.send(action)
+ else
+ @json_hash[:alert]="invalid operation #{action}"
+ @json_hash[:success]=false
+ render :json => @json_hash
+ end
+ end
+
def disable
set_disabled(1)
end
@@ -70,23 +83,36 @@ class HostController < ApplicationController
def set_disabled(value)
operation = value == 1 ? "diabled" : "enabled"
- @host = Host.find(params[:id])
- set_perms(@host.hardware_pool)
- unless @can_modify
- alert= 'You do not have permission to edit this host'
- success=false
- else
- begin
- @host.is_disabled = value
- @host.save
- alert="Host was successfully #{operation}"
- success=true
- rescue
- alert="Error setting host to #{operation}"
- success=false
+ begin
+ @host.is_disabled = value
+ @host.save!
+ @json_hash[:alert]="Host was successfully #{operation}"
+ @json_hash[:success]=true
+ rescue
+ @json_hash[:alert]="Error setting host to #{operation}"
+ @json_hash[:success]=false
+ end
+ render :json => @json_hash
+ end
+
+ def clear_vms
+ begin
+ Host.transaction do
+ task = HostTask.new({ :user => get_login_user,
+ :host_id => @host.id,
+ :action => HostTask::ACTION_CLEAR_VMS,
+ :state => Task::STATE_QUEUED})
+ task.save!
+ @host.is_disabled = true
+ @host.save!
end
+ @json_hash[:alert]="Clear VMs action was successfully queued."
+ @json_hash[:success]=true
+ rescue
+ @json_hash[:alert]="Error in queueing Clear VMs action."
+ @json_hash[:success]=false
end
- render :json => { :object => "host", :success =>
success, :alert => alert }
+ render :json => @json_hash
end
@@ -105,6 +131,12 @@ class HostController < ApplicationController
flash[:notice] = 'Hosts may not be edited via the web UI'
redirect_to :action=> 'show', :id => @host
end
+ def pre_action
+ @host = Host.find(params[:id])
+ @perm_obj = @host.hardware_pool
+ @json_hash = { :object => :host }
+ authorize_admin
+ end
def pre_show
@host = Host.find(params[:id])
@perm_obj = @host.hardware_pool
diff --git a/wui/src/app/views/host/show.rhtml
b/wui/src/app/views/host/show.rhtml
index 0903ac0..619a126 100644
--- a/wui/src/app/views/host/show.rhtml
+++ b/wui/src/app/views/host/show.rhtml
@@ -4,22 +4,24 @@
<%- content_for :action_links do -%>
<%if @can_modify -%>
<%if @host.is_disabled.nil? or @host.is_disabled == 0 -%>
- <a href="#" onClick="toggle_host(false)">
+ <a href="#"
onClick="host_action('disable')">
<%= image_tag "icon_suspend.png" %> Disable Host
</a>
<% else -%>
- <a href="#" onClick="toggle_host(true)">
+ <a href="#"
onClick="host_action('enable')">
<%= image_tag "icon_start.png" %> Enable Host
</a>
<% end -%>
+ <a href="#"
onClick="host_action('clear_vms')">
+ <%= image_tag "icon_x.png" %> Clear VMs
+ </a>
<%- end -%>
<%- end -%>
<script type="text/javascript">
- function toggle_host(enable)
+ function host_action(action)
{
- enable_url = '<%= url_for :controller => "host",
:action => "enable", :id => @host %>'
- disable_url = '<%= url_for :controller => "host",
:action => "disable", :id => @host %>'
- $.post(enable ? enable_url : disable_url,
+ $.post('<%= url_for :controller => "host", :action
=> 'host_action', :id => @host%>',
+ { action_type: action },
function(data,status){
refresh_summary('hosts_selection',
'<%= url_for :controller =>
"host",
--
1.5.4.1
Jason Guiditta
2008-Jun-27 19:01 UTC
[Ovirt-devel] [PATCH] initial support for "clear this VM" UI.
When I apply this patch my host list looks funky (screenshot attached).
The columns in the table are not lined up with the headers and after the
first row, the ids show instead of the checkboxes. I havent figured out
where this is coming from yet, but can help debug if you like. Also,
small thing I noticed. Here:
?@@ -70,23 +83,36 @@ class HostController < ApplicationController
def set_disabled(value)
operation = value == 1 ? "diabled" : "enabled"
s/diabled/disabled
We should probably start thinking about a better way to set our error
messages, as the current approach is not very i18n-friendly.
-j
-------------- next part --------------
A non-text attachment was scrubbed...
Name: hosts-list.png
Type: image/png
Size: 207384 bytes
Desc: not available
URL:
<http://listman.redhat.com/archives/ovirt-devel/attachments/20080627/48d20f16/attachment.png>
Jason Guiditta
2008-Jun-27 19:35 UTC
[Ovirt-devel] [PATCH] initial support for "clear this VM" UI.
On Mon, 2008-06-23 at 12:02 -0400, Scott Seago wrote:> taskomatic bits are not in, so for now taskomatic should just fail these tasks as 'unknown task type' > > Another bit to work out -- what should the logic be for when to show the 'clear this VM' task? Do we need to hide the link when: > 1) there's already a pending clear VM task for this host > 2) vm is disabled and there are no VMs running > 3) vm is unavailable > > Signed-off-by: Scott Seago <sseago at redhat.com> > --- > wui/src/app/controllers/application.rb | 6 ++- > wui/src/app/controllers/host_controller.rb | 62 +++++++++++++++++++++------- > wui/src/app/views/host/show.rhtml | 14 ++++--- > 3 files changed, 60 insertions(+), 22 deletions(-) > > diff --git a/wui/src/app/controllers/application.rb b/wui/src/app/controllers/application.rb > index a3a99a0..aa8fd7c 100644 > --- a/wui/src/app/controllers/application.rb > +++ b/wui/src/app/controllers/application.rb > @@ -74,7 +74,11 @@ class ApplicationController < ActionController::Base > unless (is_modify_action ? @can_modify : @can_control_vms) > @redir_obj = @perm_obj unless @redir_obj > flash[:notice] = 'You do not have permission to create or modify this item ' > - if @redir_controller > + if @json_hash > + @json_hash[:success] = false > + @json_hash[:alert] = flash[:notice] > + render :json => @json_hash > + elsif @redir_controller > redirect_to :controller => @redir_controller, :action => 'show', :id => @redir_obj > else > redirect_to :action => 'show', :id => @redir_obj > diff --git a/wui/src/app/controllers/host_controller.rb b/wui/src/app/controllers/host_controller.rb > index 8eb26b9..9e60b1f 100644 > --- a/wui/src/app/controllers/host_controller.rb > +++ b/wui/src/app/controllers/host_controller.rb > @@ -23,6 +23,8 @@ class HostController < ApplicationController > render :action => 'list' > end > > + before_filter :pre_action, :only => [:host_action, :enable, :disable, :clear_vms] > + > # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html) > verify :method => :post, :only => [ :destroy, :create, :update ], > :redirect_to => { :action => :list } > @@ -61,6 +63,17 @@ class HostController < ApplicationController > def destroy > end > > + def host_action > + action = params[:action_type] > + if["disable", "enable", "clear_vms"].include?(action) > + self.send(action) > + else > + @json_hash[:alert]="invalid operation #{action}" > + @json_hash[:success]=false > + render :json => @json_hash > + end > + end > + > def disable > set_disabled(1) > end > @@ -70,23 +83,36 @@ class HostController < ApplicationController > > def set_disabled(value) > operation = value == 1 ? "diabled" : "enabled" > - @host = Host.find(params[:id]) > - set_perms(@host.hardware_pool) > - unless @can_modify > - alert= 'You do not have permission to edit this host' > - success=false > - else > - begin > - @host.is_disabled = value > - @host.save > - alert="Host was successfully #{operation}" > - success=true > - rescue > - alert="Error setting host to #{operation}" > - success=false > + begin > + @host.is_disabled = value > + @host.save! > + @json_hash[:alert]="Host was successfully #{operation}" > + @json_hash[:success]=true > + rescue > + @json_hash[:alert]="Error setting host to #{operation}" > + @json_hash[:success]=false > + end > + render :json => @json_hash > + end > + > + def clear_vms > + begin > + Host.transaction do > + task = HostTask.new({ :user => get_login_user, > + :host_id => @host.id, > + :action => HostTask::ACTION_CLEAR_VMS, > + :state => Task::STATE_QUEUED}) > + task.save! > + @host.is_disabled = true > + @host.save! > end > + @json_hash[:alert]="Clear VMs action was successfully queued." > + @json_hash[:success]=true > + rescue > + @json_hash[:alert]="Error in queueing Clear VMs action." > + @json_hash[:success]=false > end > - render :json => { :object => "host", :success => success, :alert => alert } > + render :json => @json_hash > end > > > @@ -105,6 +131,12 @@ class HostController < ApplicationController > flash[:notice] = 'Hosts may not be edited via the web UI' > redirect_to :action=> 'show', :id => @host > end > + def pre_action > + @host = Host.find(params[:id]) > + @perm_obj = @host.hardware_pool > + @json_hash = { :object => :host } > + authorize_admin > + end > def pre_show > @host = Host.find(params[:id]) > @perm_obj = @host.hardware_pool > diff --git a/wui/src/app/views/host/show.rhtml b/wui/src/app/views/host/show.rhtml > index 0903ac0..619a126 100644 > --- a/wui/src/app/views/host/show.rhtml > +++ b/wui/src/app/views/host/show.rhtml > @@ -4,22 +4,24 @@ > <%- content_for :action_links do -%> > <%if @can_modify -%> > <%if @host.is_disabled.nil? or @host.is_disabled == 0 -%> > - <a href="#" onClick="toggle_host(false)"> > + <a href="#" onClick="host_action('disable')"> > <%= image_tag "icon_suspend.png" %> Disable Host > </a> > <% else -%> > - <a href="#" onClick="toggle_host(true)"> > + <a href="#" onClick="host_action('enable')"> > <%= image_tag "icon_start.png" %> Enable Host > </a> > <% end -%> > + <a href="#" onClick="host_action('clear_vms')"> > + <%= image_tag "icon_x.png" %> Clear VMs > + </a> > <%- end -%> > <%- end -%> > <script type="text/javascript"> > - function toggle_host(enable) > + function host_action(action) > { > - enable_url = '<%= url_for :controller => "host", :action => "enable", :id => @host %>' > - disable_url = '<%= url_for :controller => "host", :action => "disable", :id => @host %>' > - $.post(enable ? enable_url : disable_url, > + $.post('<%= url_for :controller => "host", :action => 'host_action', :id => @host%>', > + { action_type: action }, > function(data,status){ > refresh_summary('hosts_selection', > '<%= url_for :controller => "host",Except for the 'diabled' typo, ACK. Turns out this is an existing bug against FF3 (not filed yet, will try to get one added this afternoon). Works fine on FF2 -j