Revision 9dc100e4
Added by Joseph Magen almost 10 years ago
app/controllers/api/v2/compute_attributes_controller.rb | ||
---|---|---|
module Api
|
||
module V2
|
||
class ComputeAttributesController < V2::BaseController
|
||
|
||
before_filter :find_resource, :only => :update
|
||
|
||
def_param_group :compute_attribute do
|
||
param :compute_attribute, Hash, :action_aware => true do
|
||
param :vm_attrs, Hash, :required => true
|
||
end
|
||
end
|
||
|
||
api :POST, "/compute_resources/:compute_resource_id/compute_profiles/:compute_profile_id/compute_attributes", "Create a compute attribute"
|
||
api :POST, "/compute_profiles/:compute_profile_id/compute_resources/:compute_resource_id/compute_attributes", "Create a compute attribute"
|
||
api :POST, "/compute_resources/:compute_resource_id/compute_attributes", "Create a compute attribute"
|
||
api :POST, "/compute_profiles/:compute_profile_id/compute_attributes", "Create a compute attribute"
|
||
api :POST, "/compute_attributes/", "Create a compute attribute."
|
||
param :compute_profile_id, :identifier, :required => true
|
||
param :compute_resource_id, :identifier, :required => true
|
||
param_group :compute_attribute, :as => :create
|
||
|
||
def create
|
||
params[:compute_attribute].merge!(:compute_profile_id => params[:compute_profile_id],
|
||
:compute_resource_id => params[:compute_resource_id])
|
||
@compute_attribute = ComputeAttribute.create!(params[:compute_attribute])
|
||
render :json => @compute_attribute.to_json
|
||
end
|
||
|
||
api :PUT, "/compute_resources/:compute_resource_id/compute_profiles/:compute_profile_id/compute_attributes/:id", "Update a compute attribute"
|
||
api :PUT, "/compute_profiles/:compute_profile_id/compute_resources/:compute_resource_id/compute_attributes/:id", "Update a compute attribute"
|
||
api :PUT, "/compute_resources/:compute_resource_id/compute_attributes/:id", "Update a compute attribute"
|
||
api :PUT, "/compute_profiles/:compute_profile_id/compute_attributes/:id", "Update a compute attribute"
|
||
api :PUT, "/compute_attributes/:id", "Update a compute attribute."
|
||
|
||
param :compute_profile_id, :identifier, :required => false
|
||
param :compute_resource_id, :identifier, :required => false
|
||
param :id, String, :required => true
|
||
param_group :compute_attribute
|
||
|
||
def update
|
||
process_response @compute_attribute.update_attributes(params[:compute_attribute])
|
||
end
|
||
|
||
end
|
||
end
|
||
end
|
app/controllers/api/v2/compute_profiles_controller.rb | ||
---|---|---|
module Api
|
||
module V2
|
||
class ComputeProfilesController < V2::BaseController
|
||
before_filter :find_resource, :only => [:show, :update, :destroy]
|
||
|
||
api :GET, "/compute_profiles", "List of compute profiles"
|
||
param :search, String, :desc => "filter results"
|
||
param :order, String, :desc => "sort results"
|
||
param :page, String, :desc => "paginate results"
|
||
param :per_page, String, :desc => "number of entries per request"
|
||
|
||
def index
|
||
@compute_profiles = ComputeProfile.authorized(:view_config_profiles).
|
||
search_for(*search_options).paginate(paginate_options)
|
||
end
|
||
|
||
api :GET, "/compute_profiles/:id/", "Show a compute profile."
|
||
param :id, :identifier, :required => true
|
||
|
||
def show
|
||
end
|
||
|
||
def_param_group :compute_profile do
|
||
param :compute_profile, Hash, :action_aware => true do
|
||
param :name, String, :required => true
|
||
end
|
||
end
|
||
|
||
api :POST, "/compute_profiles/", "Create a compute profile."
|
||
param_group :compute_profile, :as => :create
|
||
|
||
def create
|
||
@compute_profile = ComputeProfile.new(params[:compute_profile])
|
||
process_response @compute_profile.save
|
||
end
|
||
|
||
api :PUT, "/compute_profiles/:id/", "Update a compute profile."
|
||
param :id, String, :required => true
|
||
param_group :compute_profile
|
||
|
||
def update
|
||
process_response @compute_profile.update_attributes(params[:compute_profile])
|
||
end
|
||
|
||
api :DELETE, "/compute_profiles/:id/", "Delete a compute profile."
|
||
param :id, String, :required => true
|
||
|
||
def destroy
|
||
process_response @compute_profile.destroy
|
||
end
|
||
|
||
end
|
||
end
|
||
end
|
||
|
||
|
app/controllers/api/v2/hosts_controller.rb | ||
---|---|---|
|
||
before_filter :find_resource, :except => %w{index create facts}
|
||
before_filter :permissions_check, :only => %w{power boot puppetrun}
|
||
|
||
add_puppetmaster_filters :facts
|
||
|
||
api :GET, "/hosts/", "List all hosts."
|
||
... | ... | |
param :managed, :bool
|
||
param :progress_report_id, String, :desc => 'UUID to track orchestration tasks status, GET /api/orchestration/:UUID/tasks'
|
||
param :capabilities, String
|
||
param :compute_profile_id, :number
|
||
param :compute_attributes, Hash do
|
||
end
|
||
end
|
||
... | ... | |
permission = "#{params[:action]}_hosts".to_sym
|
||
deny_access unless Host.authorized(permission).find(@host.id)
|
||
end
|
||
|
||
end
|
||
end
|
||
end
|
||
|
app/models/host/managed.rb | ||
---|---|---|
:allow_blank => true, :allow_nil => true
|
||
validates :provision_method, :inclusion => {:in => PROVISION_METHODS, :message => N_('is unknown')}, :if => Proc.new {|host| host.managed?}
|
||
validate :provision_method_in_capabilities
|
||
after_validation :set_compute_attributes
|
||
before_validation :set_compute_attributes, :only => :create
|
||
end
|
||
|
||
before_validation :set_hostgroup_defaults, :set_ip_address, :normalize_addresses, :normalize_hostname, :force_lookup_value_matcher
|
app/services/foreman/access_permissions.rb | ||
---|---|---|
}
|
||
map.permission :edit_compute_resources, {:compute_resources => [:edit, :update].push(*ajax_actions),
|
||
:compute_profiles => [:new, :create, :edit, :update, :destroy, :index, :show, :auto_complete_search],
|
||
:compute_attributes => [:new, :create, :edit, :update, :destroy, :index, :show],
|
||
:compute_attributes => [:new, :create, :edit, :update],
|
||
:"api/v1/compute_resources" => [:update],
|
||
:"api/v2/compute_resources" => [:update]
|
||
:"api/v2/compute_resources" => [:update],
|
||
:"api/v2/compute_profiles" => [:index, :show, :create, :update, :destroy],
|
||
:"api/v2/compute_attributes" => [:create, :update]
|
||
}
|
||
map.permission :destroy_compute_resources, {:compute_resources => [:destroy],
|
||
:"api/v1/compute_resources" => [:destroy],
|
app/views/api/v2/compute_attributes/base.json.rabl | ||
---|---|---|
object @compute_attribute
|
||
|
||
attributes :id, :name, :compute_resource_id, :compute_resource_name,
|
||
:compute_profile_id, :compute_profile_name, :vm_attrs
|
app/views/api/v2/compute_attributes/index.json.rabl | ||
---|---|---|
collection @compute_attributes
|
||
|
||
extends "api/v2/compute_attributes/main"
|
app/views/api/v2/compute_attributes/main.json.rabl | ||
---|---|---|
object @compute_attribute
|
||
|
||
extends "api/v2/compute_attributes/base"
|
||
|
||
attributes :created_at, :updated_at
|
app/views/api/v2/compute_attributes/show.json.rabl | ||
---|---|---|
object @compute_attribute
|
||
|
||
extends "api/v2/compute_attributes/main"
|
||
|
app/views/api/v2/compute_profiles/base.json.rabl | ||
---|---|---|
object @compute_profile
|
||
|
||
attributes :id, :name
|
app/views/api/v2/compute_profiles/index.json.rabl | ||
---|---|---|
collection @compute_profiles
|
||
|
||
extends "api/v2/compute_profiles/main"
|
app/views/api/v2/compute_profiles/main.json.rabl | ||
---|---|---|
object @compute_profile
|
||
|
||
extends "api/v2/compute_profiles/base"
|
||
|
||
attributes :created_at, :updated_at
|
app/views/api/v2/compute_profiles/show.json.rabl | ||
---|---|---|
object @compute_profile
|
||
|
||
extends "api/v2/compute_profiles/main"
|
||
|
||
child :compute_attributes do
|
||
extends "api/v2/compute_attributes/base"
|
||
end
|
app/views/api/v2/compute_resources/show.json.rabl | ||
---|---|---|
extends "api/v2/images/base"
|
||
end
|
||
|
||
child :compute_attributes do
|
||
extends "api/v2/compute_attributes/base"
|
||
end
|
||
|
||
node do |compute_resource|
|
||
partial("api/v2/taxonomies/children_nodes", :object => compute_resource)
|
||
end
|
config/routes/api/v2.rb | ||
---|---|---|
resources :template_combinations, :only => [:show, :destroy]
|
||
resources :config_groups, :except => [:new, :edit]
|
||
|
||
resources :compute_attributes, :only => [:create, :update]
|
||
|
||
resources :compute_profiles, :except => [:new, :edit] do
|
||
resources :compute_attributes, :only => [:create, :update]
|
||
resources :compute_resources, :except => [:new, :edit] do
|
||
resources :compute_attributes, :only => [:create, :update]
|
||
end
|
||
end
|
||
|
||
# add "constraint" that unconstrained and allows :id to have dot notation ex. sat.redhat.com
|
||
constraints(:id => /[^\/]+/) do
|
||
resources :compute_resources, :except => [:new, :edit] do
|
||
... | ... | |
get 'available_clusters/(:cluster_id)/available_networks', :to => 'compute_resources#available_networks', :on => :member
|
||
(resources :locations, :only => [:index, :show]) if SETTINGS[:locations_enabled]
|
||
(resources :organizations, :only => [:index, :show]) if SETTINGS[:organizations_enabled]
|
||
resources :compute_attributes, :only => [:create, :update]
|
||
resources :compute_profiles, :except => [:new, :edit] do
|
||
resources :compute_attributes, :only => [:create, :update]
|
||
end
|
||
end
|
||
|
||
resources :realms, :except => [:new, :edit] do
|
||
(resources :locations, :only => [:index, :show]) if SETTINGS[:locations_enabled]
|
||
(resources :organizations, :only => [:index, :show]) if SETTINGS[:organizations_enabled]
|
test/functional/api/v2/compute_attributes_controller_test.rb | ||
---|---|---|
require 'test_helper'
|
||
|
||
class Api::V2::ComputeAttributesControllerTest < ActionController::TestCase
|
||
|
||
test "should create compute attribute" do
|
||
assert_difference('ComputeAttribute.count') do
|
||
valid_attrs = {:vm_attrs => {"cpus"=>"2", "memory"=>"2147483648"}}
|
||
post :create, {:compute_attribute => valid_attrs,
|
||
:compute_profile_id => compute_profiles(:three).id,
|
||
:compute_resource_id => compute_resources(:one).id
|
||
}
|
||
end
|
||
assert_response :success
|
||
end
|
||
|
||
test "should update compute attribute" do
|
||
valid_attrs = {:vm_attrs => {"cpus"=>"4"}}
|
||
put :update, { :id => compute_attributes(:two).id,
|
||
:compute_profile_id => compute_profiles(:one).id,
|
||
:compute_resource_id =>compute_resources(:one).id,
|
||
:compute_attribute => valid_attrs
|
||
}
|
||
assert_response :success
|
||
assert_equal "4", compute_attributes(:two).reload.vm_attrs[:cpus]
|
||
end
|
||
|
||
end
|
test/functional/api/v2/compute_profiles_controller_test.rb | ||
---|---|---|
require 'test_helper'
|
||
|
||
class Api::V2::ComputeProfilesControllerTest < ActionController::TestCase
|
||
|
||
test "should get index" do
|
||
get :index, { }
|
||
assert_response :success
|
||
assert_not_nil assigns(:compute_profiles)
|
||
compute_profiles = ActiveSupport::JSON.decode(@response.body)
|
||
assert !compute_profiles.empty?
|
||
end
|
||
|
||
test "should show individual record" do
|
||
get :show, { :id => compute_profiles(:one).to_param }
|
||
assert_response :success
|
||
show_response = ActiveSupport::JSON.decode(@response.body)
|
||
assert !show_response.empty?
|
||
end
|
||
|
||
test "should create compute profile" do
|
||
assert_difference('ComputeProfile.count') do
|
||
post :create, { :compute_profile => {:name => '4-Xlarge'} }
|
||
end
|
||
assert_response :success
|
||
end
|
||
|
||
test "should update compute_profile" do
|
||
put :update, { :id => compute_profiles(:one).to_param, :compute_profile => {:name => 'new name' } }
|
||
assert_response :success
|
||
end
|
||
|
||
test "should destroy compute profile" do
|
||
assert_difference('ComputeProfile.count', -1) do
|
||
delete :destroy, { :id => compute_profiles(:three).to_param }
|
||
end
|
||
assert_response :success
|
||
end
|
||
|
||
end
|
test/unit/host_test.rb | ||
---|---|---|
|
||
test "compute attributes are populated by hardware profile from hostgroup" do
|
||
# hostgroups(:common) fixture has compute_profiles(:one)
|
||
host = Host.create :name => "myhost", :mac => "aa-bb-cc-dd-ee-ff", :hostgroup_id => hostgroups(:common).id, :compute_resource_id => compute_resources(:ec2).id
|
||
host = Host.new :name => "myhost", :hostgroup_id => hostgroups(:common).id, :compute_resource_id => compute_resources(:ec2).id, :managed => true
|
||
host.expects(:queue_compute_create)
|
||
assert host.valid?, host.errors.full_messages.to_sentence
|
||
assert_equal compute_attributes(:one).vm_attrs, host.compute_attributes
|
||
end
|
||
|
||
test "compute attributes are populated by hardware profile passed to host" do
|
||
# hostgroups(:one) fixture has compute_profiles(:common)
|
||
host = Host.create :name => "myhost", :mac => "aa-bb-cc-dd-ee-ff", :compute_resource_id => compute_resources(:ec2).id, :compute_profile_id => compute_profiles(:two).id
|
||
host = Host.new :name => "myhost", :compute_resource_id => compute_resources(:ec2).id, :compute_profile_id => compute_profiles(:two).id, :managed => true, :domain => domains(:mydomain), :operatingsystem => operatingsystems(:redhat), :architecture => architectures(:x86_64), :environment => environments(:production)
|
||
host.expects(:queue_compute_create)
|
||
assert host.valid?, host.errors.full_messages.to_sentence
|
||
assert_equal compute_attributes(:three).vm_attrs, host.compute_attributes
|
||
end
|
||
|
Also available in: Unified diff
fixes #4250 - API v2 - add compute profiles
(cherry picked from commit 10ac97b0d91a2ef9769cc00d3ddf95e2b50ee545)