[email protected] wrote:
> 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)
>   
pool = @task.instance.pool
> +    cloud_account = CloudAccount.find(@task.instance.cloud_account_id)
> +
>   
cloud_account = @task.instance.cloud_account
> +    [pool, cloud_account].each do |parent|
>   

> +      if Quota.exists?(parent.quota_id)
>   
quota = parent.quota
  if parent.quota
>   
> +        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
>   
Cloud account quota needs to be taken into account earlier than this as 
well -- in the scheduling bit, but as a last resort it should be checked 
here too, so the above should be fine.
> +          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
>   

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

Reply via email to