mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-21 14:50:08 +03:00
feature #801: Add onequota unset
This commit is contained in:
parent
1040d34766
commit
faa3a8b8c6
@ -99,7 +99,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
||||
arg_list.map! {|a| a.to_i }
|
||||
[0, arg_list]
|
||||
end
|
||||
|
||||
|
||||
set :format, :userid, OpenNebulaHelper.rname_to_id_desc("USER") do |arg|
|
||||
OpenNebulaHelper.rname_to_id(arg, "USER")
|
||||
end
|
||||
@ -130,6 +130,26 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
||||
exit_with_code 0
|
||||
end
|
||||
|
||||
########################################################################
|
||||
unset_desc = <<-EOT.unindent
|
||||
Unset a quota for a given user.
|
||||
Examples:
|
||||
onequota unset 3 cpu
|
||||
onequota unset 4 cpu,memory,storage
|
||||
EOT
|
||||
|
||||
command :unset, unset_desc, :userid, :quota_list do
|
||||
user_id, keys = args
|
||||
|
||||
values_hash = Hash.new
|
||||
keys.each_with_index { |k,i|
|
||||
values_hash[k.to_sym] = 0
|
||||
}
|
||||
|
||||
quota.set_quota(user_id, values_hash)
|
||||
exit_with_code 0
|
||||
end
|
||||
|
||||
########################################################################
|
||||
delete_desc = "Delete the defined quotas for the given user"
|
||||
|
||||
@ -140,7 +160,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
||||
|
||||
########################################################################
|
||||
show_desc = "Show the user's quota and usage. (usage/quota)"
|
||||
|
||||
|
||||
FORCE={
|
||||
:name => "force",
|
||||
:short => "-f",
|
||||
|
@ -154,6 +154,19 @@ class Quota
|
||||
set(QUOTA_TABLE, uid, quota)
|
||||
end
|
||||
|
||||
# Retrieves quota information for a given user
|
||||
#
|
||||
# @param [Integer, nil] uid the user id from which get the quota
|
||||
# information, if nil will retrieve the quotas for all users.
|
||||
# @return [Hash] Hash containing the quota information and the user id
|
||||
#
|
||||
# {
|
||||
# :uid => 4,
|
||||
# :cpu => 8,
|
||||
# :memory => 8064,
|
||||
# :num_vms => 4,
|
||||
# :storage => 1240019
|
||||
# }
|
||||
def get_quota(uid=nil)
|
||||
limit = get(QUOTA_TABLE, uid)
|
||||
limit ? limit : @conf[:defaults].merge!(:uid => uid)
|
||||
@ -192,14 +205,16 @@ class Quota
|
||||
msg = ""
|
||||
separator = ""
|
||||
info.each { |qname, quota_requested|
|
||||
unless quota[qname]
|
||||
unless quota[qname] || quota[qname]==0
|
||||
next
|
||||
end
|
||||
|
||||
used = send(DB_QUOTA_SCHEMA[qname].name.to_sym, total[qname])
|
||||
request = send(DB_QUOTA_SCHEMA[qname].name.to_sym, quota_requested)
|
||||
limit = send(DB_QUOTA_SCHEMA[qname].name.to_sym, quota[qname])
|
||||
spent = used + request
|
||||
type = DB_QUOTA_SCHEMA[qname].name.to_sym
|
||||
|
||||
used = send(type, total[qname])
|
||||
request = send(type, quota_requested)
|
||||
limit = send(type, quota[qname])
|
||||
spent = used + request
|
||||
|
||||
if spent > limit
|
||||
msg << separator
|
||||
@ -228,6 +243,22 @@ class Quota
|
||||
###########################################################################
|
||||
# Usage
|
||||
###########################################################################
|
||||
# Retrieves usage information for a given user
|
||||
#
|
||||
# @param [Integer] uid the user id from which get the usage information.
|
||||
# @param ["VM", "IMAGE"] resource kind of resource. If nil will return
|
||||
# the usage for all kinds of resources
|
||||
# @param [true, false] force If true will force the usage calculation
|
||||
# instead of retrieving it from the cache
|
||||
# @return [Hash] Hash containing the usage information and the user id
|
||||
#
|
||||
# {
|
||||
# :uid => 4,
|
||||
# :cpu => 8,
|
||||
# :memory => 8064,
|
||||
# :num_vms => 4,
|
||||
# :storage => 1240019
|
||||
# }
|
||||
def get_usage(user_id, resource=nil, force=false)
|
||||
if force
|
||||
if RESOURCES.include?(resource)
|
||||
|
@ -80,10 +80,10 @@ describe "Quota testing" do
|
||||
it "should check default cache (force)" do
|
||||
usage1force = @quota.get_usage(@uid1, nil, true)
|
||||
usage1force[:uid].should eql(0)
|
||||
usage1force[:num_vms].should eql(nil)
|
||||
usage1force[:cpu].should eql(nil)
|
||||
usage1force[:memory].should eql(nil)
|
||||
usage1force[:storage].should eql(nil)
|
||||
usage1force[:num_vms].should eql(0)
|
||||
usage1force[:cpu].should eql(0)
|
||||
usage1force[:memory].should eql(0)
|
||||
usage1force[:storage].should eql(0)
|
||||
end
|
||||
|
||||
it "should authorize the user because there is no quota defined" do
|
||||
@ -106,10 +106,10 @@ describe "Quota testing" do
|
||||
it "should check the usage cache is not updated" do
|
||||
usage1cache = @quota.get_usage(@uid1)
|
||||
usage1cache[:uid].should eql(0)
|
||||
usage1cache[:num_vms].should eql(nil)
|
||||
usage1cache[:cpu].should eql(nil)
|
||||
usage1cache[:memory].should eql(nil)
|
||||
usage1cache[:storage].should eql(nil)
|
||||
usage1cache[:num_vms].should eql(0)
|
||||
usage1cache[:cpu].should eql(0.0)
|
||||
usage1cache[:memory].should eql(0)
|
||||
usage1cache[:storage].should eql(0)
|
||||
end
|
||||
|
||||
it "should check the cache (force)" do
|
||||
@ -118,7 +118,7 @@ describe "Quota testing" do
|
||||
usage1force[:num_vms].should eql(1)
|
||||
usage1force[:cpu].should eql(2.0)
|
||||
usage1force[:memory].should eql(128)
|
||||
usage1force[:storage].should eql(nil)
|
||||
usage1force[:storage].should eql(0)
|
||||
end
|
||||
|
||||
it "should check the usage cache is updated and contains the last usage" do
|
||||
@ -127,7 +127,7 @@ describe "Quota testing" do
|
||||
usage1cache[:num_vms].should eql(1)
|
||||
usage1cache[:cpu].should eql(2.0)
|
||||
usage1cache[:memory].should eql(128)
|
||||
usage1cache[:storage].should eql(nil)
|
||||
usage1cache[:storage].should eql(0)
|
||||
end
|
||||
|
||||
it "should add a new Image" do
|
||||
@ -146,7 +146,7 @@ describe "Quota testing" do
|
||||
usage1cache[:num_vms].should eql(1)
|
||||
usage1cache[:cpu].should eql(2.0)
|
||||
usage1cache[:memory].should eql(128)
|
||||
usage1cache[:storage].should eql(nil)
|
||||
usage1cache[:storage].should eql(0)
|
||||
end
|
||||
|
||||
it "should check the cache (force)" do
|
||||
@ -252,7 +252,7 @@ describe "Quota testing" do
|
||||
end
|
||||
|
||||
it "should not authorize the user because the vm quota is spent" do
|
||||
err_msg = "CPU quota exceeded (Quota: 2.4, Used: 4.0, Asked: 2.0)."
|
||||
err_msg = "CPU quota exceeded (Quota: 2.4, Used: 4.0, Requested: 2.0)"
|
||||
@quota.authorize(@uid1, @acl_vm_create).should eql(err_msg)
|
||||
@quota.authorize(@uid1, @acl_template_instantiate).should eql(err_msg)
|
||||
|
||||
@ -320,7 +320,7 @@ describe "Quota testing" do
|
||||
@quota.authorize(@uid1, @acl_vm_create).should eql(false)
|
||||
@quota.authorize(@uid1, @acl_template_instantiate).should eql(false)
|
||||
|
||||
err_msg = "STORAGE quota exceeded (Quota: 0, Used: 2000, Asked: 1474)."
|
||||
err_msg = "STORAGE quota exceeded (Quota: 0, Used: 2000, Requested: 271)"
|
||||
@quota.authorize(@uid1, @acl_image_create).should eql(err_msg)
|
||||
end
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user