From: martyntaylor <mtaylor(a)redhat.com>
---
src/app/controllers/instance_controller.rb | 24 +++++++++++++++---------
src/app/models/quota.rb | 20 ++++++++++++--------
2 files changed, 27 insertions(+), 17 deletions(-)
diff --git a/src/app/controllers/instance_controller.rb
b/src/app/controllers/instance_controller.rb
index ad90404..a81af6a 100644
--- a/src/app/controllers/instance_controller.rb
+++ b/src/app/controllers/instance_controller.rb
@@ -98,16 +98,22 @@ class InstanceController < ApplicationController
Pool.find((a)instance.pool_id))
#FIXME: This should probably be in a transaction
if @instance.save!
-
- @task = InstanceTask.new({:user => current_user,
- :task_target => @instance,
- :action => InstanceTask::ACTION_CREATE})
- if @task.save
- condormatic_instance_create(@task)
- flash[:notice] = "Instance added."
- redirect_to :action => 'index'
+ if Quota.can_start_instance?(@instance, nil)
+ @task = InstanceTask.new({:user => current_user,
+ :task_target => @instance,
+ :action => InstanceTask::ACTION_CREATE})
+ if @task.save
+ condormatic_instance_create(@task)
+ flash[:notice] = "Instance added."
+ redirect_to :action => 'index'
+ else
+ @pool = @instance.pool
+ render :action => 'configure'
+ end
else
- @pool = @instance.pool
+ @instance.destroy
+ flash[:notice] = "Quota Exceeded: Could not create instance"
+ @hardware_profiles = HardwareProfile.all
render :action => 'configure'
end
else
diff --git a/src/app/models/quota.rb b/src/app/models/quota.rb
index 83c20c4..49cd0ce 100644
--- a/src/app/models/quota.rb
+++ b/src/app/models/quota.rb
@@ -49,10 +49,12 @@ class Quota < ActiveRecord::Base
def self.can_create_instance?(instance, cloud_account)
[instance.owner, instance.pool, cloud_account].each do |parent|
- quota = Quota.find(parent.quota_id)
- potential_total_instances = quota.total_instances + 1
- if !Quota.no_limit(quota.maximum_total_instances) &&
(quota.maximum_total_instances < potential_total_instances)
- return false
+ if parent
+ quota = Quota.find(parent.quota_id)
+ potential_total_instances = quota.total_instances + 1
+ if !Quota.no_limit(quota.maximum_total_instances) &&
(quota.maximum_total_instances < potential_total_instances)
+ return false
+ end
end
end
return true
@@ -60,10 +62,12 @@ class Quota < ActiveRecord::Base
def self.can_start_instance?(instance, cloud_account)
[instance.owner, instance.pool, cloud_account].each do |parent|
- quota = Quota.find(parent.quota_id)
- potential_running_instances = quota.running_instances + 1
- if !Quota.no_limit(quota.maximum_running_instances) &&
quota.maximum_running_instances < potential_running_instances
- return false
+ if parent
+ quota = Quota.find(parent.quota_id)
+ potential_running_instances = quota.running_instances + 1
+ if !Quota.no_limit(quota.maximum_running_instances) &&
quota.maximum_running_instances < potential_running_instances
+ return false
+ end
end
end
return true
--
1.7.2.3