From: martyntaylor <[email protected]>

---
 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(@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

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to