Project

General

Profile

« Previous | Next » 

Revision 901fe896

Added by Ondřej Pražák over 7 years ago

Fixes #14688 - Power status visible on hosts index page

View differences:

app/controllers/hosts_controller.rb
select_multiple_puppet_proxy update_multiple_puppet_proxy
select_multiple_puppet_ca_proxy update_multiple_puppet_ca_proxy)
HOST_POWER = {
:on => { :state => 'on', :title => _('On') },
:off => { :state => 'off', :title => _('Off') },
:na => { :state => 'na', :title => _('N/A') }
}.freeze
add_smart_proxy_filters PUPPETMASTER_ACTIONS, :features => ['Puppet']
before_action :ajax_request, :only => AJAX_REQUESTS
before_action :ajax_request, :only => AJAX_REQUESTS + [:get_power_state]
before_action :find_resource, :only => [:show, :clone, :edit, :update, :destroy, :puppetrun, :review_before_build,
:setBuild, :cancelBuild, :power, :overview, :bmc, :vm,
:setBuild, :cancelBuild, :power, :get_power_state, :overview, :bmc, :vm,
:runtime, :resources, :nics, :ipmi_boot, :console,
:toggle_manage, :pxe_config, :storeconfig_klasses, :disassociate]
......
process_error :redirect => :back, :error_msg => _("Failed to %{action} %{host}: %{e}") % { :action => _(params[:power_action]), :host => @host, :e => e }
end
def get_power_state
result = ({:id => @host.id}).merge(HOST_POWER[:na])
if @host.supports_power?
result = host_power_ping result
else
result[:statusText] = _('Power operation are not enabled on this host.')
end
render :json => result
rescue => e
Foreman::Logging.exception("Failed to fetch power status", e)
result.merge!(HOST_POWER[:na])
result[:statusText] = _("Failed to fetch power status #{e}")
render :json => result
end
def overview
render :partial => 'overview', :locals => { :host => @host }
rescue ActionView::Template::Error => exception
......
def action_permission
case params[:action]
when 'clone', 'externalNodes', 'overview', 'bmc', 'vm', 'runtime', 'resources', 'templates', 'nics',
'pxe_config', 'storeconfig_klasses', 'active', 'errors', 'out_of_sync', 'pending', 'disabled'
'pxe_config', 'storeconfig_klasses', 'active', 'errors', 'out_of_sync', 'pending', 'disabled',
'get_power_state'
:view
when 'puppetrun', 'multiple_puppetrun', 'update_multiple_puppetrun'
:puppetrun
......
end.compact
raise Foreman::Exception.new(N_("No templates found")) if @templates.empty?
end
def host_power_ping(result)
timeout = 3
Timeout.timeout(timeout) do
result.merge!(HOST_POWER[@host.supports_power_and_running? ? :on : :off])
end
result
rescue Timeout::Error
message = "Failed to retrieve power status for #{@host} within #{timeout} seconds."
logger.debug(message)
result[:statusText] = _(message)
result
end
end

Also available in: Unified diff