Project

General

Profile

« Previous | Next » 

Revision 997bfddb

Added by Joseph Magen over 10 years ago

fixes #3928 - API v2 - update os_default_templates for operating system

View differences:

app/controllers/api/v2/os_default_templates_controller.rb
module Api
module V2
class OsDefaultTemplatesController < V2::BaseController
include Api::Version2
include Api::TaxonomyScope
before_filter :find_required_nested_object
before_filter :find_resource, :only => %w{show update destroy}
api :GET, '/operatingsystems/:operatingsystem_id/os_default_templates', 'List os default templates for operating system'
param :operatingsystem_id, String, :desc => 'id of operating system'
param :page, String, :desc => 'paginate results'
param :per_page, String, :desc => 'number of entries per request'
def index
@os_default_templates = nested_obj.os_default_templates.paginate(paginate_options)
end
api :GET, '/operatingsystems/:operatingsystem_id/os_default_templates/:id', 'Show a os default template kind for operating system'
param :operatingsystem_id, String, :desc => 'id of operating system'
param :id, :number, :required => true
def show
end
def_param_group :os_default_template do
param :os_default_template, Hash, :required => true do
param :template_kind_id, :number
param :config_template_id, :number
end
end
api :POST, '/operatingsystems/:operatingsystem_id/os_default_templates/', 'Create a os default template for operating system'
param :operatingsystem_id, String, :desc => 'id of operating system'
param_group :os_default_template
def create
@os_default_template = nested_obj.os_default_templates.new(params[:os_default_template])
process_response @os_default_template.save
end
api :PUT, '/operatingsystems/:operatingsystem_id/os_default_templates/:id', 'Update a os default template for operating system'
param :operatingsystem_id, String, :desc => 'id of operating system'
param :id, String, :required => true
param_group :os_default_template
def update
process_response @os_default_template.update_attributes(params[:os_default_template])
end
api :DELETE, '/operatingsystems/:operatingsystem_id/os_default_templates/:id', 'Delete a os default template for operating system'
param :operatingsystem_id, String, :desc => 'id of operating system'
param :id, String, :required => true
def destroy
process_response @os_default_template.destroy
end
private
def allowed_nested_id
%w(operatingsystem_id)
end
end
end
end
app/services/foreman/access_permissions.rb
map.security_block :operatingsystems do |map|
map.permission :view_operatingsystems, { :operatingsystems => [:index, :show, :bootfiles, :auto_complete_search],
:"api/v1/operatingsystems" => [:index, :show, :bootfiles],
:"api/v2/operatingsystems" => [:index, :show, :bootfiles]
:"api/v2/operatingsystems" => [:index, :show, :bootfiles],
:"api/v2/os_default_templates" => [:index, :show]
}
map.permission :create_operatingsystems, {:operatingsystems => [:new, :create],
:"api/v1/operatingsystems" => [:create],
:"api/v2/operatingsystems" => [:create],
:"api/v2/os_default_templates" => [:create]
}
map.permission :edit_operatingsystems, {:operatingsystems => [:edit, :update],
:"api/v1/operatingsystems" => [:update],
:"api/v2/operatingsystems" => [:update],
:"api/v2/parameters" => [:create, :update, :destroy, :reset]
:"api/v2/parameters" => [:create, :update, :destroy, :reset],
:"api/v2/os_default_templates" => [:create, :update, :destroy]
}
map.permission :destroy_operatingsystems, {:operatingsystems => [:destroy],
:"api/v1/operatingsystems" => [:destroy],
:"api/v2/operatingsystems" => [:destroy]
:"api/v2/operatingsystems" => [:destroy],
:"api/v2/os_default_templates" => [:create]
}
end
app/views/api/v2/config_templates/base.json.rabl
object @config_template
attributes :id, :name
attributes :id, :name, :template_kind_id, :template_kind_name
app/views/api/v2/config_templates/main.json.rabl
extends "api/v2/config_templates/base"
attributes :snippet, :audit_comment, :template_kind_id, :template_kind_name, :created_at, :updated_at
attributes :snippet, :audit_comment, :created_at, :updated_at
app/views/api/v2/os_default_templates/base.json.rabl
object @os_default_template
attributes :id, :config_template_id, :config_template_name, :template_kind_id, :template_kind_name
app/views/api/v2/os_default_templates/create.json.rabl
object @os_default_template
extends "api/v2/os_default_templates/show"
app/views/api/v2/os_default_templates/index.json.rabl
collection @os_default_templates
extends "api/v2/os_default_templates/main"
app/views/api/v2/os_default_templates/main.json.rabl
object @os_default_template
extends "api/v2/os_default_templates/base"
app/views/api/v2/os_default_templates/show.json.rabl
object @os_default_template
extends "api/v2/os_default_templates/main"
app/views/api/v2/os_default_templates/update.json.rabl
object @os_default_template
extends "api/v2/os_default_templates/show"
config/routes/api/v2.rb
delete '/', :to => :reset
end
end
resources :os_default_templates, :except => [:new, :edit]
end
resources :puppetclasses, :except => [:new, :edit] do
test/functional/api/v2/os_default_templates_controller_test.rb
require 'test_helper'
class Api::V2::OsDefaultTemplatesControllerTest < ActionController::TestCase
test 'should get os_default_templates for os' do
get :index, {:operatingsystem_id => operatingsystems(:centos5_3).to_param }
assert_response :success
assert_not_nil assigns(:os_default_templates)
results = ActiveSupport::JSON.decode(@response.body)
assert_equal 6, results['results'].length
end
test 'should show os_default_template' do
get :show, { :operatingsystem_id => operatingsystems(:redhat).to_param, :id => os_default_templates(:one) }
assert_response :success
assert_not_nil assigns(:os_default_template)
show_response = ActiveSupport::JSON.decode(@response.body)
assert !show_response.empty?
end
test 'should create os_default_template for os' do
# remove all os default templates and then create one below
OsDefaultTemplate.delete_all
assert_difference('OsDefaultTemplate.count') do
post :create, { :operatingsystem_id => operatingsystems(:redhat).to_param, :os_default_template => {:config_template_id => config_templates(:mystring).id,
:template_kind_id => template_kinds(:gpxe).id}
}
end
assert_response :success
assert_not_nil assigns(:os_default_template)
end
test 'should update os_default_template for os' do
# current fixtures has pxekickstart for PXELinux template kind. Update it to pxe_local_default
put :update, { :operatingsystem_id => operatingsystems(:redhat).to_param, :id => os_default_templates(:one),
:os_default_template => {:config_template_id => config_templates(:pxe_local_default).id, :template_kind_id => template_kinds(:pxelinux).id}
}
assert_response :success
assert_not_nil assigns(:os_default_template)
response = ActiveSupport::JSON.decode(@response.body)
assert !response.empty?
assert_equal response['config_template_id'], config_templates(:pxe_local_default).id
end
test 'should destroy os_default_template for os' do
assert_difference('OsDefaultTemplate.count', -1) do
delete :destroy, { :operatingsystem_id => operatingsystems(:redhat).to_param, :id => os_default_templates(:one) }
end
assert_response :success
end
end

Also available in: Unified diff