Project

General

Profile

« Previous | Next » 

Revision fa941058

Added by Shlomi Zadok over 9 years ago

fixes #9030 - Adds support to clone config template via api

View differences:

app/controllers/api/v2/config_templates_controller.rb
include Foreman::Controller::ConfigTemplates
before_filter :find_optional_nested_object
before_filter :find_resource, :only => %w{show update destroy}
before_filter :find_resource, :only => %w{show update destroy clone}
before_filter :handle_template_upload, :only => [:create, :update]
before_filter :process_template_kind, :only => [:create, :update]
......
render :json => msg, :status => status
end
def_param_group :config_template_clone do
param :config_template, Hash, :required => true, :action_aware => true do
param :name, String, :required => true, :desc => N_("template name")
end
end
api :POST, "/config_templates/:id/clone", N_("Clone a provision template")
param :id, :identifier, :required => true
param_group :config_template_clone, :as => :create
def clone
@config_template = @config_template.clone
load_vars_from_config_template
@config_template.name = params[:config_template][:name]
process_response @config_template.save
end
private
def process_operatingsystems
......
%w(operatingsystem_id location_id organization_id)
end
def action_permission
case params[:action]
when 'clone'
'create'
else
super
end
end
end
end
end
app/controllers/concerns/foreman/controller/config_templates.rb
module Foreman::Controller::ConfigTemplates
extend ActiveSupport::Concern
def load_vars_from_config_template
return unless @config_template
@locations = @config_template.locations
@organizations = @config_template.organizations
@template_kind_id = @config_template.template_kind_id
@operatingsystems = @config_template.operatingsystems
end
private
def default_template_url(template, hostgroup)
app/controllers/config_templates_controller.rb
def clone
@config_template = @config_template.clone
load_vars_for_form
load_vars_from_config_template
flash[:warning] = _("The marked fields will need reviewing")
@config_template.valid?
render :action => :new
......
end
def edit
load_vars_for_form
load_vars_from_config_template
end
def update
......
end
end
def load_vars_for_form
return unless @config_template
@locations = @config_template.locations
@organizations = @config_template.organizations
@template_kind_id = @config_template.template_kind_id
@operatingsystems = @config_template.operatingsystems
end
def revision
audit = Audit.find(params[:version])
render :json => audit.revision.template
app/services/foreman/access_permissions.rb
}
map.permission :create_templates, {:config_templates => [:new, :create, :clone],
:"api/v1/config_templates" => [:create],
:"api/v2/config_templates" => [:create],
:"api/v2/config_templates" => [:create, :clone],
:"api/v2/template_combinations" => [:create]
}
map.permission :edit_templates, {:config_templates => [:edit, :update],
config/routes/api/v2.rb
resources :config_templates, :except => [:new, :edit] do
(resources :locations, :only => [:index, :show]) if SETTINGS[:locations_enabled]
(resources :organizations, :only => [:index, :show]) if SETTINGS[:organizations_enabled]
post :clone, :on => :member
collection do
get 'build_pxe_default'
get 'revision'
test/functional/api/v2/config_templates_controller_test.rb
assert_response :success
assert_equal "aha", config_templates(:pxekickstart).audits.last.comment
end
test 'should clone template' do
original_config_template = config_templates(:pxekickstart)
post :clone, { :id => original_config_template.to_param,
:config_template => {:name => 'MyClone'} }
assert_response :success
template = ActiveSupport::JSON.decode(@response.body)
assert_equal(template['name'], 'MyClone')
assert_equal(template['template'], original_config_template.template)
end
test 'clone name should not be blank' do
post :clone, { :id => config_templates(:pxekickstart).to_param,
:config_template => {:name => ''} }
assert_response :unprocessable_entity
end
end

Also available in: Unified diff