Revision fa941058
Added by Shlomi Zadok over 9 years ago
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
fixes #9030 - Adds support to clone config template via api