Revision 901fe896
Added by Ondřej Pražák over 7 years ago
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
Fixes #14688 - Power status visible on hosts index page