Revision 40df7dfb
Added by Daniel Lobato Garcia about 11 years ago
- ID 40df7dfbfcde38f06d133fea97f0d30904155916
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
fixes #426 expose BMC information in foreman UI
Signed-off-by: Ohad Levy <ohadlevy@gmail.com>
This patch also adds an abstracted power management class for both VM
and BM