From: Petr Blaho pblaho@redhat.com
https://www.aeolusproject.org/redmine/issues/3249
Adds route to PUT api/providers => ProvidersController#update
Refactors ProvidersController#parse_provider_type into before_filter
Changes Provider.find_by_id to Provider.find in edit and update actions. This caused ugly errors in UI when url chenged to non existing Provider --- src/app/controllers/providers_controller.rb | 50 +++++++++++++++++---------- src/config/routes.rb | 2 +- 2 files changed, 33 insertions(+), 19 deletions(-)
diff --git a/src/app/controllers/providers_controller.rb b/src/app/controllers/providers_controller.rb index cfadb5a..9767244 100644 --- a/src/app/controllers/providers_controller.rb +++ b/src/app/controllers/providers_controller.rb @@ -18,6 +18,7 @@ class ProvidersController < ApplicationController before_filter :require_user before_filter :load_providers, :only => [:index, :show, :new, :edit, :create, :update] before_filter :load_providers_types, :only => [:new, :edit, :update, :create] + before_filter :parse_provider_type, :only => [:create, :update]
def index @params = params @@ -52,7 +53,7 @@ class ProvidersController < ApplicationController end
def edit - @provider = Provider.find_by_id(params[:id]) + @provider = Provider.find(params[:id]) @title = t 'cloud_providers' session[:current_provider_id] = @provider.id # requiring VIEW rather than MODIFY since edit doubles as the 'show' page @@ -109,13 +110,6 @@ class ProvidersController < ApplicationController params[:provider][:provider_type_id] = provider_type.id end
- # looking for ProviderType based on content of provider_type tag in xml - if params[:provider].has_key?(:provider_type) && params[:provider][:provider_type].has_key?(:id) - provider_type_hash = params[:provider].delete(:provider_type) - provider_type_id = provider_type_hash[:id] - provider_type = ProviderType.find_by_id(provider_type_id) - params[:provider][:provider_type_id] = provider_type.id - end
@provider = Provider.new(params[:provider])
@@ -140,7 +134,7 @@ class ProvidersController < ApplicationController end
def update - @provider = Provider.find_by_id(params[:id]) + @provider = Provider.find(params[:id]) require_privilege(Privilege::MODIFY, @provider) @provider.attributes = params[:provider] provider_disabled = @provider.enabled_changed? && !@provider.enabled @@ -152,20 +146,30 @@ class ProvidersController < ApplicationController
if @provider.save @provider.update_availability - flash[:notice] = t"providers.flash.notice.updated" - redirect_to edit_provider_path(@provider) + respond_to do |format| + format.html do + flash[:notice] = t"providers.flash.notice.updated" + redirect_to edit_provider_path(@provider) + end + format.xml { render :partial => 'detail', :locals => { :provider => @provider } } + end else # we reset 'enabled' attribute to real state # if save failed @provider.reset_enabled! - unless @provider.connect - flash.now[:warning] = t"providers.flash.warning.connect_failed" - else - flash[:error] = t"providers.flash.error.not_updated" + respond_to do |format| + format.html do + unless @provider.connect + flash.now[:warning] = t"providers.flash.warning.connect_failed" + else + flash[:error] = t"providers.flash.error.not_updated" + end + load_provider_tabs + @alerts = provider_alerts(@provider) + render :action => "edit" + end + format.xml { render :template => 'api/validation_error', :locals => { :errors => @provider.errors }, :status => :bad_request } end - load_provider_tabs - @alerts = provider_alerts(@provider) - render :action => "edit" end end
@@ -191,6 +195,16 @@ class ProvidersController < ApplicationController
protected
+ # looking for ProviderType based on content of provider_type tag in xml + def parse_provider_type + if params.has_key?(:provider) && params[:provider].has_key?(:provider_type) && params[:provider][:provider_type].has_key?(:id) + provider_type_hash = params[:provider].delete(:provider_type) + provider_type_id = provider_type_hash[:id] + provider_type = ProviderType.find_by_id(provider_type_id) + params[:provider][:provider_type_id] = provider_type.id + end + end + def test_connection(provider) @provider.errors.clear if @provider.update_availability diff --git a/src/config/routes.rb b/src/config/routes.rb index 0a8ff00..da762a7 100644 --- a/src/config/routes.rb +++ b/src/config/routes.rb @@ -265,7 +265,7 @@ Conductor::Application.routes.draw do end
scope "/api" do - resources :providers, :as => 'api_providers', :only => [:index, :show, :create, :destroy] + resources :providers, :as => 'api_providers', :only => [:index, :show, :create, :update, :destroy] resources :provider_accounts, :as => 'api_provider_accounts', :only => [:index, :show] resources :provider_types, :as => 'api_provider_types', :only => [:index, :show] end