From: martyntaylor <[email protected]>
---
src/app/controllers/pool_controller.rb | 2 +-
src/app/models/task.rb | 4 +++-
src/app/util/taskomatic.rb | 28 ++++++++++++++++++++++++++--
src/app/views/pool/new_quota.html.erb | 1 +
src/spec/factories/quota.rb | 8 ++++++++
5 files changed, 39 insertions(+), 4 deletions(-)
diff --git a/src/app/controllers/pool_controller.rb
b/src/app/controllers/pool_controller.rb
index 3bb43e2..7ff39b7 100644
--- a/src/app/controllers/pool_controller.rb
+++ b/src/app/controllers/pool_controller.rb
@@ -164,7 +164,7 @@ class PoolController < ApplicationController
@quota = Quota.new(params[:quota])
@quota.save!
- @pool.quota_id = @quota
+ @pool.quota_id = @quota.id
@pool.save!
flash[:notice] = "Quota Created!"
diff --git a/src/app/models/task.rb b/src/app/models/task.rb
index f3aaa63..ebbde40 100644
--- a/src/app/models/task.rb
+++ b/src/app/models/task.rb
@@ -43,7 +43,9 @@ class Task < ActiveRecord::Base
FAILURE_PROVIDER_CONTACT_FAILED = "provider_contact_failed"
FAILURE_PROVIDER_RETURNED_FAILED = "provider_returned_failed"
- FAILURE_CODES = [FAILURE_PROVIDER_NOT_FOUND,
FAILURE_PROVIDER_CONTACT_FAILED, FAILURE_PROVIDER_RETURNED_FAILED]
+ FAILURE_OVER_POOL_QUOTA = "exceeded_pool_quota"
+
+ FAILURE_CODES = [FAILURE_PROVIDER_NOT_FOUND,
FAILURE_PROVIDER_CONTACT_FAILED, FAILURE_PROVIDER_RETURNED_FAILED,
FAILURE_OVER_POOL_QUOTA]
validates_inclusion_of :failure_code,
:in => FAILURE_CODES + [nil]
diff --git a/src/app/util/taskomatic.rb b/src/app/util/taskomatic.rb
index 74e069c..ccef5c7 100644
--- a/src/app/util/taskomatic.rb
+++ b/src/app/util/taskomatic.rb
@@ -45,6 +45,20 @@ class Taskomatic
def instance_create
+ pool = Pool.find(@task.instance.pool_id)
+ if Quota.exists?(pool.quota_id)
+ if !Quota.find(pool.quota_id).can_create_instance?(@task.instance)
+ @task.state = Task::STATE_FAILED
+ @task.failure_code = Task::FAILURE_OVER_POOL_QUOTA
+ @task.instance.state = Instance::STATE_CREATE_FAILED
+
+ @task.save!
+ @task.instance.save!
+
+ return nil
+ end
+ end
+
begin
client = @task.instance.cloud_account.connect
realm = @task.instance.realm.external_key rescue nil
@@ -112,7 +126,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 +186,5 @@ class Taskomatic
end
end
end
-end
\ No newline at end of file
+
+end
diff --git a/src/app/views/pool/new_quota.html.erb
b/src/app/views/pool/new_quota.html.erb
index 4290862..87dc02d 100644
--- a/src/app/views/pool/new_quota.html.erb
+++ b/src/app/views/pool/new_quota.html.erb
@@ -1,5 +1,6 @@
<div class="dcloud_form">
<%= error_messages_for 'pool' %>
+ <%= error_messages_for 'quota' %>
<h2>Create Quota for Pool: <%= @pool.name %></legend></h2><br />
diff --git a/src/spec/factories/quota.rb b/src/spec/factories/quota.rb
index a35f7ac..4a7ead8 100644
--- a/src/spec/factories/quota.rb
+++ b/src/spec/factories/quota.rb
@@ -4,4 +4,12 @@ Factory.define :quota do |f|
f.maximum_running_cpus 20
f.maximum_total_instances 15
f.maximum_total_storage 8500
+end
+
+Factory.define :full_quota, :parent => :quota do |f|
+ f.running_instances 10
+ f.running_memory 10240
+ f.running_cpus 20
+ f.total_instances 15
+ f.total_storage 8500
end
\ No newline at end of file
--
1.6.6.1
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel