Project

General

Profile

« Previous | Next » 

Revision 10ac97b0

Added by Joseph Magen about 10 years ago

fixes #4250 - API v2 - add compute profiles

View differences:

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