Project

General

Profile

Download (2.1 KB) Statistics
| Branch: | Tag: | Revision:
# This module extract repeating methods which handle host assoications of hostgroups, os etc
# Mainly used within the host and the hostgroup controllers

module Foreman::Controller::HostDetails
extend ActiveSupport::Concern

def architecture_selected
assign_parameter "architecture", "common/os_selection/"
end

def os_selected
assign_parameter "operatingsystem", "common/os_selection/" do |item|
item.suggest_default_pxe_loader
end
end

def medium_selected
# Maybe this method can be folded into assign_parameter
render :partial => "common/os_selection/image_details", :locals => { :item => item_object }
end

def domain_selected
respond_to do |format|
format.html {assign_parameter "domain", "common/"}
format.json do
taxonomy_scope
Taxonomy.as_taxonomy @organization, @location do
if (domain = Domain.find_by_id(params[:domain_id]))
render :json => domain.subnets.as_json(:include => :unused_ip)
elsif params[:interface]
render :json => Subnet.authorized(:view_subnets).as_json(:include => :unused_ip)
else
render :json => {}
end
end
end
end
end

def use_image_selected
item = item_object
render :json => {:use_image => item.use_image, :image_file => item.image_file}
end

private

def assign_parameter(name, root = "")
taxonomy_scope
Taxonomy.as_taxonomy @organization, @location do
item = instance_variable_get("@#{controller_name.singularize}") || controller_name.classify.constantize.new(item_params)
instance_variable_set("@#{name}", item.send(name.to_sym))
yield item if block_given?
render :partial => root + name, :locals => { :item => item }
end
end

def item_params
send("#{item_name}_params".to_sym)
end

def item_name
controller_name.singularize
end

# Initiate a new object based on current context, e.g:
# @host = Host.new params[:host]
def item_object
name = item_name
instance_variable_set("@#{name}", name.classify.constantize.new(public_send("#{name}_params".to_sym)))
end
end
(13-13/26)