foreman/app/controllers/compute_resources_controller.rb @ c6e02bd3
334d0359 | Amos Benari | class ComputeResourcesController < ApplicationController
|
|
include Foreman::Controller::AutoCompleteSearch
|
|||
c6e02bd3 | Joseph Magen | AJAX_REQUESTS = %w{template_selected cluster_selected}
|
|
334d0359 | Amos Benari | before_filter :ajax_request, :only => AJAX_REQUESTS
|
|
805358df | Jason Montleon | before_filter :find_by_id, :only => [:show, :edit, :update, :destroy, :ping, :associate] + AJAX_REQUESTS
|
|
334d0359 | Amos Benari | ||
def index
|
|||
e170c321 | Olivier Favre | begin
|
|
values = ComputeResource.my_compute_resources.search_for(params[:search], :order => params[:order])
|
|||
rescue => e
|
|||
error e.to_s
|
|||
values = ComputeResource.my_compute_resources.search_for ""
|
|||
end
|
|||
76e5dd41 | Joseph Mitchell Magen | @compute_resources = values.paginate :page => params[:page]
|
|
334d0359 | Amos Benari | end
|
|
def new
|
|||
@compute_resource = ComputeResource.new
|
|||
end
|
|||
e170c321 | Olivier Favre | def show
|
|
end
|
|||
334d0359 | Amos Benari | def create
|
|
if params[:compute_resource].present? && params[:compute_resource][:provider].present?
|
|||
@compute_resource = ComputeResource.new_provider params[:compute_resource]
|
|||
if @compute_resource.save
|
|||
e170c321 | Olivier Favre | # Add the new compute resource to the user's filters
|
|
@compute_resource.users << User.current
|
|||
dd42df0a | Ohad Levy | process_success :success_redirect => @compute_resource
|
|
334d0359 | Amos Benari | else
|
|
process_error
|
|||
end
|
|||
else
|
|||
@compute_resource = ComputeResource.new params[:compute_resource]
|
|||
@compute_resource.valid?
|
|||
process_error
|
|||
end
|
|||
end
|
|||
def edit
|
|||
end
|
|||
805358df | Jason Montleon | def associate
|
|
count = 0
|
|||
if @compute_resource.respond_to?(:associated_host)
|
|||
2ddd6b2c | Martin Matuska | @compute_resource.vms(:eager_loading => true).each do |vm|
|
|
805358df | Jason Montleon | if Host.where(:uuid => vm.identity).empty?
|
|
host = @compute_resource.associated_host(vm)
|
|||
if host.present?
|
|||
host.uuid = vm.identity
|
|||
host.compute_resource_id = @compute_resource.id
|
|||
host.save!(:validate => false) # don't want to trigger callbacks
|
|||
count += 1
|
|||
end
|
|||
end
|
|||
end
|
|||
end
|
|||
process_success(:success_msg => n_("%s VM associated to a host", "%s VMs associated to hosts", count) % count)
|
|||
end
|
|||
334d0359 | Amos Benari | def update
|
|
5bdc1930 | Joseph Mitchell Magen | params[:compute_resource].except!(:password) if params[:compute_resource][:password].blank?
|
|
334d0359 | Amos Benari | if @compute_resource.update_attributes(params[:compute_resource])
|
|
process_success
|
|||
else
|
|||
process_error
|
|||
end
|
|||
end
|
|||
def destroy
|
|||
if @compute_resource.destroy
|
|||
process_success
|
|||
else
|
|||
process_error
|
|||
end
|
|||
end
|
|||
#ajax methods
|
|||
def provider_selected
|
|||
@compute_resource = ComputeResource.new_provider :provider => params[:provider]
|
|||
render :partial => "compute_resources/form", :locals => { :compute_resource => @compute_resource }
|
|||
end
|
|||
8b80115c | Amos Benari | def ping
|
|
respond_to do |format|
|
|||
format.json {render :json => errors_hash(@compute_resource.ping)}
|
|||
end
|
|||
end
|
|||
334d0359 | Amos Benari | def test_connection
|
|
1eaac1c6 | Joseph Mitchell Magen | # cr_id is posted from AJAX function. cr_id is nil if new
|
|
Rails.logger.info "CR_ID IS #{params[:cr_id]}"
|
|||
if params[:cr_id].present? && params[:cr_id] != 'null'
|
|||
@compute_resource = ComputeResource.find(params[:cr_id])
|
|||
params[:compute_resource].delete(:password) if params[:compute_resource][:password].blank?
|
|||
@compute_resource.attributes = params[:compute_resource]
|
|||
else
|
|||
@compute_resource = ComputeResource.new_provider(params[:compute_resource])
|
|||
end
|
|||
617ee75f | Amos Benari | @compute_resource.test_connection :force => true
|
|
334d0359 | Amos Benari | render :partial => "compute_resources/form", :locals => { :compute_resource => @compute_resource }
|
|
end
|
|||
c6e02bd3 | Joseph Magen | def template_selected
|
|
compute = @compute_resource.template(params[:template_id])
|
|||
334d0359 | Amos Benari | compute.interfaces
|
|
96ede451 | Amos Benari | compute.volumes
|
|
334d0359 | Amos Benari | respond_to do |format|
|
|
format.json { render :json => compute }
|
|||
end
|
|||
end
|
|||
def cluster_selected
|
|||
networks = @compute_resource.networks(:cluster_id => params[:cluster_id])
|
|||
respond_to do |format|
|
|||
format.json { render :json => networks }
|
|||
end
|
|||
end
|
|||
private
|
|||
def find_by_id
|
|||
@compute_resource = ComputeResource.find(params[:id])
|
|||
e170c321 | Olivier Favre | not_found and return unless @compute_resource
|
|
deny_access and return unless ComputeResource.my_compute_resources.include?(@compute_resource)
|
|||
334d0359 | Amos Benari | end
|
|
end
|