Project

General

Profile

« Previous | Next » 

Revision 40df7dfb

Added by Daniel Lobato Garcia about 11 years ago

  • ID 40df7dfbfcde38f06d133fea97f0d30904155916

fixes #426 expose BMC information in foreman UI

Signed-off-by: Ohad Levy <>

This patch also adds an abstracted power management class for both VM
and BM

View differences:

app/controllers/hosts_controller.rb
PUPPETMASTER_ACTIONS=[ :externalNodes, :lookup ]
SEARCHABLE_ACTIONS= %w[index active errors out_of_sync pending disabled ]
AJAX_REQUESTS=%w{compute_resource_selected hostgroup_or_environment_selected current_parameters puppetclass_parameters}
BOOT_DEVICES={ :disk => N_('Disk'), :cdrom => N_('CDROM'), :pxe => N_('PXE'), :bios => N_('BIOS') }
add_puppetmaster_filters PUPPETMASTER_ACTIONS
before_filter :ajax_request, :only => AJAX_REQUESTS
......
:update_multiple_environment, :submit_multiple_build, :submit_multiple_destroy, :update_multiple_puppetrun,
:multiple_puppetrun]
before_filter :find_by_name, :only => %w[show edit update destroy puppetrun setBuild cancelBuild
storeconfig_klasses clone pxe_config toggle_manage power console]
storeconfig_klasses clone pxe_config toggle_manage power console bmc ipmi_boot]
before_filter :taxonomy_scope, :only => [:hostgroup_or_environment_selected, :process_hostgroup]
before_filter :set_host_type, :only => [:update]
helper :hosts, :reports
......
end
def power
return unless @host.compute_resource && params[:power_action]
action = case params[:power_action]
when 'start'
:start
when 'stop'
:stop
else
logger.warn "invalid power state #{params[:power_action]}"
invalid_request and return
end
vm = @host.compute_resource.find_vm_by_uuid(@host.uuid)
return invalid_request if params[:power_action].blank?
@host.power.send(params[:power_action].to_sym)
process_success :success_redirect => :back, :success_msg => _("%{host} is now %{state}") % { :host => @host, :state => _(@host.power.state) }
rescue => e
process_error :redirect => :back, :error_msg => _("Failed to %{action} %{host}: %{e}") % { :action => _(params[:power_action]), :host => @host, :e => e }
end
def bmc
render :partial => 'bmc', :locals => { :host => @host }
rescue => e
#TODO: hack
error = e.try(:original_exception).try(:response) || e.to_s
logger.warn "failed to fetch bmc information: #{error}"
logger.debug e.backtrace
render :text => "Failure: #{error}"
end
def ipmi_boot
device = params[:ipmi_device]
begin
vm.send(action)
vm.reload
process_success :success_redirect => :back, :success_msg => _("%{vm} is now %{state}") % { :vm => vm, :state => vm.state.capitalize }
@host.ipmi_boot(device)
process_success :success_redirect => :back, :success_msg => _("%{host} now boots from %{device}") % { :host => @host.name, :device => _(BOOT_DEVICES[device.downcase.to_sym] || device) }
rescue => e
process_error :redirect => :back, :error_msg => _("Failed to %{action} %{vm}: %{e}") % { :action => action, :vm => vm, :e => e }
process_error :redirect => :back, :error_msg => _("Failed to configure %{host} to boot from %{device}: %{e}") % { :device => _(BOOT_DEVICES[device.downcase.to_sym] || device), :host => @host.name, :e => e }
end
end

Also available in: Unified diff