-
Notifications
You must be signed in to change notification settings - Fork 987
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fixes #2250 API v2 add/remove puppetclasses from hosts and hostgroups
- Loading branch information
Showing
12 changed files
with
341 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,49 @@ | |||
module Api | |||
module V2 | |||
class HostClassesController < V2::BaseController | |||
|
|||
include Api::Version2 | |||
include Api::TaxonomyScope | |||
|
|||
before_filter :find_host_id, :only => [:index, :create, :destroy] | |||
|
|||
api :GET, "/hosts/:host_id/puppetclass_ids/", "List all puppetclass id's for host" | |||
|
|||
def index | |||
render :json => HostClass.where(:host_id => host_id).pluck('puppetclass_id') | |||
end | |||
|
|||
api :POST, "/hosts/:host_id/puppetclass_ids", "Add a puppetclass to host" | |||
param :host_id, String, :required => true, :desc => "id of host" | |||
param :puppetclass_id, String, :required => true, :desc => "id of puppetclass" | |||
|
|||
def create | |||
@host_class = HostClass.create!(:host_id => host_id, :puppetclass_id => params[:puppetclass_id].to_i) | |||
render :json => {:host_id => @host_class.host_id, :puppetclass_id => @host_class.puppetclass_id} | |||
end | |||
|
|||
api :DELETE, "/hosts/:host_id/puppetclass_ids/:id/", "Remove a puppetclass from host" | |||
param :host_id, String, :required => true, :desc => "id of host" | |||
param :id, String, :required => true, :desc => "id of puppetclass" | |||
|
|||
def destroy | |||
@host_class = HostClass.where(:host_id => host_id, :puppetclass_id => params[:id]) | |||
process_response @host_class.destroy_all | |||
end | |||
|
|||
private | |||
attr_reader :host_id | |||
|
|||
def find_host_id | |||
if params[:host_id] =~ /^\d+$/ | |||
return @host_id = params[:host_id].to_i | |||
else | |||
@host ||= Host::Managed.find_by_name(params[:host_id]) | |||
return @host_id = @host.id if @host | |||
render_error 'not_found', :status => :not_found and return false | |||
end | |||
end | |||
|
|||
end | |||
end | |||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,44 @@ | |||
module Api | |||
module V2 | |||
class HostgroupClassesController < V2::BaseController | |||
|
|||
include Api::Version2 | |||
include Api::TaxonomyScope | |||
|
|||
before_filter :find_hostgroup_id, :only => [:index, :create, :destroy] | |||
|
|||
api :GET, "/hostgroups/:hostgroup_id/puppetclass_ids/", "List all puppetclass id's for hostgroup" | |||
|
|||
def index | |||
render :json => HostgroupClass.where(:hostgroup_id => hostgroup_id).pluck('puppetclass_id') | |||
end | |||
|
|||
api :POST, "/hostgroups/:hostgroup_id/puppetclass_ids", "Add a puppetclass to hostgroup" | |||
param :hostgroup_id, String, :required => true, :desc => "id of hostgroup" | |||
param :puppetclass_id, String, :required => true, :desc => "id of puppetclass" | |||
|
|||
def create | |||
@hostgroup_class = HostgroupClass.create!(:hostgroup_id => hostgroup_id, :puppetclass_id => params[:puppetclass_id].to_i) | |||
render :json => {:hostgroup_id => @hostgroup_class.hostgroup_id, :puppetclass_id => @hostgroup_class.puppetclass_id} | |||
end | |||
|
|||
api :DELETE, "/hostgroups/:hostgroup_id/puppetclass_ids/:id/", "Remove a puppetclass from hostgroup" | |||
param :hostgroup_id, String, :required => true, :desc => "id of hostgroup" | |||
param :puppetclass_id, String, :required => true, :desc => "id of puppetclass" | |||
|
|||
def destroy | |||
@hostgroup_class = HostgroupClass.where(:hostgroup_id => @hostgroup_id, :puppetclass_id => params[:id]) | |||
process_response @hostgroup_class.destroy_all | |||
end | |||
|
|||
private | |||
attr_reader :hostgroup_id | |||
|
|||
# params[:hostgroup_id] is "id-to_label.parameterize" and .to_i returns the id | |||
def find_hostgroup_id | |||
@hostgroup_id = params[:hostgroup_id].to_i | |||
end | |||
|
|||
end | |||
end | |||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,60 @@ | |||
module Api | |||
module V2 | |||
class PuppetclassesController < V1::PuppetclassesController | |||
|
|||
include Api::Version2 | |||
include Api::TaxonomyScope | |||
|
|||
before_filter :find_nested_object, :only => [:index, :show] | |||
|
|||
api :GET, "/puppetclasses/", "List all puppetclasses." | |||
api :GET, "/hosts/:host_id/puppetclasses", "List all puppetclasses for host" | |||
api :GET, "/hostgroups/:hostgroup_id/puppetclasses", "List all puppetclasses for hostgroup" | |||
api :GET, "/environments/:environment_id/puppetclasses", "List all puppetclasses for environment" | |||
param :host_id, String, :desc => "id of nested host" | |||
param :hostgroup_id, String, :desc => "id of nested hostgroup" | |||
param :environment_id, String, :desc => "id of nested environment" | |||
|
|||
def index | |||
return super unless @nested_obj | |||
if @nested_obj.kind_of?(Environment) | |||
values = @nested_obj.puppetclasses | |||
else | |||
values = @nested_obj.all_puppetclasses | |||
end | |||
render :json => Puppetclass.classes2hash(values) | |||
end | |||
|
|||
api :GET, "/puppetclasses/:id", "Show a puppetclass" | |||
api :GET, "/hosts/:host_id/puppetclasses/:id", "Show a puppetclass for host" | |||
api :GET, "/hostgroups/:hostgroup_id/puppetclasses/:id", "Show a puppetclass for hostgroup" | |||
api :GET, "/environments/:environment_id/puppetclasses/:id", "Show a puppetclass for environment" | |||
param :host_id, String, :desc => "id of nested host" | |||
param :hostgroup_id, String, :desc => "id of nested hostgroup" | |||
param :environment_id, String, :desc => "id of nested environment" | |||
param :id, String, :required => true, :desc => "id of puppetclass" | |||
|
|||
def show | |||
if @nested_obj | |||
@puppetclass = @nested_obj.puppetclasses.find(params[:id]) | |||
end | |||
end | |||
|
|||
private | |||
attr_reader :nested_obj | |||
|
|||
def find_nested_object | |||
params.keys.each do |param| | |||
if param =~ /(\w+)_id$/ | |||
resource_identifying_attributes.each do |key| | |||
find_method = "find_by_#{key}" | |||
@nested_obj ||= $1.classify.constantize.send(find_method, params[param]) | |||
end | |||
end | |||
end | |||
return @nested_obj | |||
end | |||
|
|||
end | |||
end | |||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,7 @@ | |||
object @puppetclass | |||
|
|||
attributes :id, :name | |||
|
|||
child :lookup_keys do | |||
attributes :id, :key, :default_value, :path, :default_value | |||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
|
@@ -5,3 +5,9 @@ one: | ||
|
|
||
two: | two: | ||
name: apache | name: apache | ||
|
|||
three: | |||
name: git | |||
|
|||
four: | |||
name: vim |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,29 @@ | |||
require 'test_helper' | |||
|
|||
class Api::V2::HostClassesControllerTest < ActionController::TestCase | |||
|
|||
test "should get puppetclass ids for host" do | |||
get :index, {:host_id => hosts(:one).to_param } | |||
assert_response :success | |||
puppetclasses = ActiveSupport::JSON.decode(@response.body) | |||
assert !puppetclasses.empty? | |||
assert_equal puppetclasses.length, 1 | |||
end | |||
|
|||
test "should add a puppetclass to a host" do | |||
host = hosts(:one) | |||
assert_difference('host.host_classes.count') do | |||
post :create, { :host_id => host.to_param, :puppetclass_id => puppetclasses(:four).id } | |||
end | |||
assert_response :success | |||
end | |||
|
|||
test "should remove a puppetclass from a host" do | |||
host = hosts(:one) | |||
assert_difference('host.host_classes.count', -1) do | |||
delete :destroy, { :host_id => host.to_param, :id => puppetclasses(:one).id } | |||
end | |||
assert_response :success | |||
end | |||
|
|||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,29 @@ | |||
require 'test_helper' | |||
|
|||
class Api::V2::HostgroupClassesControllerTest < ActionController::TestCase | |||
|
|||
test "should get puppetclass ids for hostgroup" do | |||
get :index, {:hostgroup_id => hostgroups(:common).id } | |||
assert_response :success | |||
puppetclasses = ActiveSupport::JSON.decode(@response.body) | |||
assert !puppetclasses.empty? | |||
assert_equal puppetclasses.length, 1 | |||
end | |||
|
|||
test "should add a puppetclass to a hostgroup" do | |||
hostgroup = hostgroups(:common) | |||
assert_difference('hostgroup.hostgroup_classes.count') do | |||
post :create, { :hostgroup_id => hostgroup.id, :puppetclass_id => puppetclasses(:four).id } | |||
end | |||
assert_response :success | |||
end | |||
|
|||
test "should remove a puppetclass from a hostgroup" do | |||
hostgroup = hostgroups(:common) | |||
assert_difference('hostgroup.hostgroup_classes.count', -1) do | |||
delete :destroy, { :hostgroup_id => hostgroup.id, :id => puppetclasses(:one).id } | |||
end | |||
assert_response :success | |||
end | |||
|
|||
end |
Oops, something went wrong.