Hi Jozef, I wasn't able to apply the patch due to changes in the model: provider.rb
here the log: --- Applying: This is short-term fix. It prevents setting of provider name, error: patch failed: src/app/models/provider.rb:63 error: src/app/models/provider.rb: patch does not apply Patch failed at 0001 This is short-term fix. It prevents setting of provider name, When you have resolved this problem run "git am --resolved". If you would prefer to skip this patch, instead run "git am --skip". To restore the original branch and stop patching run "git am --abort". --- Cheers, Francesco On Tue, Sep 04, 2012 at 07:57:15PM +0200, [email protected] wrote: > From: Jozef Zigmund <[email protected]> > > This is short-term fix. It prevents setting of provider name, > that causes failing image push in imagefactory. > > https://bugzilla.redhat.com/show_bug.cgi?id=847798 > --- > src/app/controllers/providers_controller.rb | 86 > +++++++++++++++++++---------- > src/app/models/provider.rb | 40 ++++++++++++++ > src/config/locales/activerecord/en.yml | 4 ++ > src/config/locales/en.yml | 1 + > 4 files changed, 101 insertions(+), 30 deletions(-) > > diff --git a/src/app/controllers/providers_controller.rb > b/src/app/controllers/providers_controller.rb > index f3a9302..80474de 100644 > --- a/src/app/controllers/providers_controller.rb > +++ b/src/app/controllers/providers_controller.rb > @@ -121,24 +121,38 @@ class ProvidersController < ApplicationController > > @provider = Provider.new(params[:provider]) > > - if @provider.save > + begin > + if @provider.save > + @provider.assign_owner_roles(current_user) > + respond_to do |format| > + format.html do > + flash[:notice] = t"providers.flash.notice.added" > + redirect_to edit_provider_path(@provider) > + end > + format.xml { render :partial => 'detail', :locals => { :provider > => @provider } } > + end > + else > + respond_to do |format| > + format.html do > + flash[:warning] = t"providers.flash.error.not_added" > + render :action => "new" > + end > + format.xml { render :template => 'api/validation_error', :locals > => { :errors => @provider.errors }, :status => :bad_request } > + end > + end > + rescue Errno::EACCES > + Provider.skip_callback :save, :check_name > + @provider.save > @provider.assign_owner_roles(current_user) > respond_to do |format| > format.html do > flash[:notice] = t"providers.flash.notice.added" > + flash[:warning] = t"providers.flash.warning.check_config_file" > redirect_to edit_provider_path(@provider) > end > - format.xml { render :partial => 'detail', :locals => { :provider => > @provider } } > - end > - else > - respond_to do |format| > - format.html do > - flash[:warning] = t"providers.flash.error.not_added" > - render :action => "new" > - end > - format.xml { render :template => 'api/validation_error', :locals => > { :errors => @provider.errors }, :status => :bad_request } > end > end > + > end > > def update > @@ -152,31 +166,43 @@ class ProvidersController < ApplicationController > return > end > > - if @provider.save > - @provider.update_availability > - respond_to do |format| > - format.html do > - flash[:notice] = t"providers.flash.notice.updated" > - redirect_to edit_provider_path(@provider) > + begin > + if @provider.save > + @provider.update_availability > + 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! > + 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 > - format.xml { render :partial => 'detail', :locals => { :provider => > @provider } } > end > - else > - # we reset 'enabled' attribute to real state > - # if save failed > - @provider.reset_enabled! > + rescue Errno::EACCES > + Provider.skip_callback :save, :check_name > + @provider.save > 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" > + flash[:notice] = t"providers.flash.notice.updated" > + flash[:warning] = t"providers.flash.warning.check_config_file" > + redirect_to edit_provider_path(@provider) > end > - format.xml { render :template => 'api/validation_error', :locals => > { :errors => @provider.errors }, :status => :bad_request } > end > end > end > diff --git a/src/app/models/provider.rb b/src/app/models/provider.rb > index 64ddb33..80f57fc 100644 > --- a/src/app/models/provider.rb > +++ b/src/app/models/provider.rb > @@ -63,6 +63,28 @@ class Provider < ActiveRecord::Base > has_many :provider_priority_groups, :through => > :provider_priority_group_elements > > before_destroy :destroyable? > + before_save :check_name > + > + def check_name > + case provider_type.name > + when "Mock" > + if name.starts_with?("mock") > + true > + else > + errors.add(:name, :start_with_mock) > + false > + end > + when "RHEV-M" > + load_rhevm_json(name) > + when "Amazon EC2" > + if name.starts_with?("ec2-") > + true > + else > + errors.add(:name, :start_with_ec2) > + false > + end > + end > + end > > def derived_subtree(role = nil) > subtree = super(role) > @@ -144,6 +166,7 @@ class Provider < ActiveRecord::Base > end > end > if res[:failed_to_stop].blank? and res[:failed_to_terminate].blank? > + Provider.skip_callback :save, :check_name > update_attribute(:enabled, false) > end > res > @@ -277,4 +300,21 @@ class Provider < ActiveRecord::Base > end > true > end > + > + def load_rhevm_json(provider_name) > + path_to_json = "/etc/imagefactory/rhevm.json" > + if File.exists?(path_to_json) > + json = File.read(path_to_json) > + json_hash = ActiveSupport::JSON.decode(json) > + if json_hash.key?(provider_name) > + true > + else > + errors.add(:name, :not_found_in_config) > + false > + end > + else > + errors.add(:name, :config_not_exist) > + false > + end > + end > end > diff --git a/src/config/locales/activerecord/en.yml > b/src/config/locales/activerecord/en.yml > index ae2514d..9d2242e 100644 > --- a/src/config/locales/activerecord/en.yml > +++ b/src/config/locales/activerecord/en.yml > @@ -360,6 +360,10 @@ en: > attributes: > name: > invalid: "must only contain: numbers, letters, spaces, '_' and > '-'" > + not_found_in_config: "was not found in configuration file" > + config_not_exist: "cannot be verified, configuration file does > not exist" > + start_with_mock: "must start with 'mock'" > + start_with_ec2: "must start with 'ec2-'" > url: > invalid_framework: "Must be a valid provider uri" > deltacloud_provider: > diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml > index c8fd262..2652dd5 100644 > --- a/src/config/locales/en.yml > +++ b/src/config/locales/en.yml > @@ -1201,6 +1201,7 @@ en: > connect_failed: "Failed to connect to Provider" > not_stopped_instances: "Provider was not disabled. Failed to stop > following instances:" > not_terminated_instances: "Provider was not disabled. Failed to > change status to 'stopped' for following instances:" > + check_config_file: Cannot check if provider name is right. Please > check config file > alerts: > type: > critical: Critical > -- > 1.7.11.4 >
