From: martyntaylor <[email protected]>

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

diff --git a/src/app/util/taskomatic.rb b/src/app/util/taskomatic.rb
index 74e069c..3277c4d 100644
--- a/src/app/util/taskomatic.rb
+++ b/src/app/util/taskomatic.rb
@@ -45,6 +45,34 @@ class Taskomatic
 
   def instance_create
 
+    # This block assumes that all providers will put instance into running 
state after create,
+    # Therefore this block checks both whether the instance can be created and 
whether the instance
+    # can go to state running.
+    # TODO Modify this to handle generic case for providers
+    pool = @task.instance.pool
+    cloud_account = @task.instance.cloud_account
+
+    [pool, cloud_account].each do |parent|
+      quota = parent.quota
+      if quota
+        if !quota.can_create_instance?(@task.instance) || 
!quota.can_start_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 @task
+        end
+      end
+    end
+
     begin
       client = @task.instance.cloud_account.connect
       realm = @task.instance.realm.external_key rescue nil
@@ -112,7 +140,25 @@ class Taskomatic
   end
 
   def instance_start
-    do_action(:start!)
+    pool = @task.instance.pool
+    cloud_account = @task.instance.cloud_account
+
+    [pool, cloud_account].each do |parent|
+      quota = parent.quota
+      if quota
+        if quota.can_start_instance?(@task.instance)
+          do_action(:start!)
+        else
+          @task.state = Task::STATE_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!
+        end
+      end
+    end
   end
 
   def instance_stop
@@ -163,4 +209,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