From: martyntaylor <[email protected]>

---
 src/app/util/taskomatic.rb |   38 ++++++++++++++++++++++++++++++++++++--
 1 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/src/app/util/taskomatic.rb b/src/app/util/taskomatic.rb
index 74e069c..f51c37b 100644
--- a/src/app/util/taskomatic.rb
+++ b/src/app/util/taskomatic.rb
@@ -45,6 +45,30 @@ class Taskomatic
 
   def instance_create
 
+    # Check that creating this instance is permitted by Quota
+    pool = Pool.find(@task.instance.pool_id)
+    cloud_account = CloudAccount.find(@task.instance.cloud_account_id)
+
+    [pool, cloud_account].each do |parent|
+      if Quota.exists?(parent.quota_id)
+        if !Quota.find(parent.quota_id).can_create_instance?(@task.instance)
+          @task.state = Task::STATE_FAILED
+          @task.instance.state = Instance::STATE_CREATE_FAILED
+
+          if parent.class == Pool
+            @task.failure_code =  Task::FAILURE_OVER_POOL_QUOTA
+          elsif parent.class == CloudAccount
+            @task.failure_code =  Task::FAILURE_OVER_CLOUD_ACCOUNT_QUOTA
+          end
+
+          @task.save!
+          @task.instance.save!
+
+          return nil
+        end
+      end
+    end
+
     begin
       client = @task.instance.cloud_account.connect
       realm = @task.instance.realm.external_key rescue nil
@@ -112,7 +136,16 @@ class Taskomatic
   end
 
   def instance_start
-    do_action(:start!)
+    pool = Pool.find(@task.instance.pool_id)
+    if Quota.exists?(pool.quota_id)
+      if !Quota.find(pool.quota_id).can_create_instance?(@task.instance)
+        do_action(:start!)
+        return nil
+      end
+    end
+
+    @task.state = Task::STATE_FAILED
+    @task.failure_code = Task::FAILURE_OVER_POOL_QUOTA
   end
 
   def instance_stop
@@ -163,4 +196,5 @@ class Taskomatic
       end
     end
   end
-end
\ No newline at end of file
+
+end
-- 
1.6.6.1

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

Reply via email to