mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-21 14:50:08 +03:00
feature #873: Add quota information to OCCI
This commit is contained in:
parent
20a0a78184
commit
5911824045
@ -242,9 +242,9 @@ class Quota
|
||||
pool = get_pool(res, user_id)
|
||||
base_xpath = "/#{res}_POOL/#{resource}"
|
||||
Quota.const_get("#{res}_USAGE".to_sym).each { |key, params|
|
||||
usage[key] ||= 0
|
||||
pool.each_xpath("#{base_xpath}/#{params[:xpath]}") { |elem|
|
||||
if elem
|
||||
usage[key] ||= 0
|
||||
if params[:count]
|
||||
usage[key] += 1
|
||||
else
|
||||
|
@ -27,6 +27,8 @@ require 'VirtualNetworkOCCI'
|
||||
require 'VirtualNetworkPoolOCCI'
|
||||
require 'ImageOCCI'
|
||||
require 'ImagePoolOCCI'
|
||||
require 'UserOCCI'
|
||||
require 'UserPoolOCCI'
|
||||
|
||||
require 'pp'
|
||||
|
||||
@ -36,7 +38,6 @@ require 'pp'
|
||||
# OpenNebula Engine
|
||||
##############################################################################
|
||||
class OCCIServer < CloudServer
|
||||
|
||||
# Server initializer
|
||||
# config_file:: _String_ path of the config file
|
||||
# template:: _String_ path to the location of the templates
|
||||
@ -72,7 +73,7 @@ class OCCIServer < CloudServer
|
||||
def get_computes(request)
|
||||
# --- Get User's VMs ---
|
||||
user_flag = -1
|
||||
|
||||
|
||||
vmpool = VirtualMachinePoolOCCI.new(
|
||||
self.client,
|
||||
user_flag)
|
||||
@ -99,14 +100,14 @@ class OCCIServer < CloudServer
|
||||
def get_networks(request)
|
||||
# --- Get User's VNETs ---
|
||||
user_flag = -1
|
||||
|
||||
|
||||
network_pool = VirtualNetworkPoolOCCI.new(
|
||||
self.client,
|
||||
user_flag)
|
||||
|
||||
# --- Prepare XML Response ---
|
||||
rc = network_pool.info
|
||||
|
||||
|
||||
if OpenNebula.is_error?(rc)
|
||||
if rc.message.match("Error getting")
|
||||
return rc, 404
|
||||
@ -125,14 +126,14 @@ class OCCIServer < CloudServer
|
||||
def get_storages(request)
|
||||
# --- Get User's Images ---
|
||||
user_flag = -1
|
||||
|
||||
|
||||
image_pool = ImagePoolOCCI.new(
|
||||
self.client,
|
||||
user_flag)
|
||||
|
||||
# --- Prepare XML Response ---
|
||||
rc = image_pool.info
|
||||
|
||||
|
||||
if OpenNebula.is_error?(rc)
|
||||
if rc.message.match("Error getting")
|
||||
return rc, 404
|
||||
@ -144,6 +145,24 @@ class OCCIServer < CloudServer
|
||||
return to_occi_xml(image_pool, 200)
|
||||
end
|
||||
|
||||
# Gets the pool representation of USERs
|
||||
# request:: _Hash_ hash containing the data of the request
|
||||
# [return] _String_,_Integer_ User pool representation or error,
|
||||
# status code
|
||||
def get_users(request)
|
||||
# --- Get Users Pool ---
|
||||
user_pool = UserPoolOCCI.new(self.client)
|
||||
|
||||
# --- Prepare XML Response ---
|
||||
rc = user_pool.info
|
||||
|
||||
if OpenNebula.is_error?(rc)
|
||||
return rc, CloudServer::HTTP_ERROR_CODE[rc.errno]
|
||||
end
|
||||
|
||||
return to_occi_xml(user_pool, 200)
|
||||
end
|
||||
|
||||
############################################################################
|
||||
############################################################################
|
||||
# ENTITY RESOURCE METHODS
|
||||
@ -190,7 +209,7 @@ class OCCIServer < CloudServer
|
||||
|
||||
# --- Prepare XML Response ---
|
||||
rc = vm.info
|
||||
|
||||
|
||||
if OpenNebula.is_error?(rc)
|
||||
if rc.message.match("Error getting")
|
||||
return rc, 404
|
||||
@ -232,13 +251,13 @@ class OCCIServer < CloudServer
|
||||
vm = VirtualMachineOCCI.new(
|
||||
VirtualMachine.build_xml(params[:id]),
|
||||
self.client)
|
||||
|
||||
|
||||
rc = vm.info
|
||||
return rc, 400 if OpenNebula.is_error?(rc)
|
||||
|
||||
|
||||
xmldoc = XMLElement.build_xml(request.body, 'COMPUTE')
|
||||
vm_info = XMLElement.new(xmldoc) if xmldoc != nil
|
||||
|
||||
|
||||
# Check the number of changes in the request
|
||||
image_name = nil
|
||||
image_type = nil
|
||||
@ -251,7 +270,7 @@ class OCCIServer < CloudServer
|
||||
image_type = disk.attr('.', 'type')
|
||||
}
|
||||
state = vm_info['STATE']
|
||||
|
||||
|
||||
if image_name && state
|
||||
error_msg = "It is not allowed to change the state and save_as" <<
|
||||
" a disk in the same request"
|
||||
@ -270,12 +289,12 @@ class OCCIServer < CloudServer
|
||||
" suppossed to be saved"
|
||||
return OpenNebula::Error.new(error_msg), 400
|
||||
end
|
||||
|
||||
|
||||
rc = vm.save_as(disk_id, image_name)
|
||||
if OpenNebula.is_error?(rc)
|
||||
image.delete
|
||||
return rc, 400
|
||||
end
|
||||
end
|
||||
elsif state
|
||||
rc = vm.mk_action(state)
|
||||
return rc, 400 if OpenNebula.is_error?(rc)
|
||||
@ -324,7 +343,7 @@ class OCCIServer < CloudServer
|
||||
|
||||
# --- Prepare XML Response ---
|
||||
rc = network.info
|
||||
|
||||
|
||||
if OpenNebula.is_error?(rc)
|
||||
if rc.message.match("Error getting")
|
||||
return rc, 404
|
||||
@ -354,7 +373,7 @@ class OCCIServer < CloudServer
|
||||
|
||||
return "", 204
|
||||
end
|
||||
|
||||
|
||||
# Updates a NETWORK resource
|
||||
# request:: _Hash_ hash containing the data of the request
|
||||
# [return] _String_,_Integer_ Update confirmation msg or error,
|
||||
@ -366,10 +385,10 @@ class OCCIServer < CloudServer
|
||||
vnet = VirtualNetworkOCCI.new(
|
||||
VirtualNetwork.build_xml(params[:id]),
|
||||
self.client)
|
||||
|
||||
|
||||
rc = vnet.info
|
||||
return rc, 400 if OpenNebula.is_error?(rc)
|
||||
|
||||
|
||||
if vnet_info['PUBLIC'] == 'YES'
|
||||
rc = vnet.publish
|
||||
return rc, 400 if OpenNebula.is_error?(rc)
|
||||
@ -432,7 +451,7 @@ class OCCIServer < CloudServer
|
||||
self.client)
|
||||
|
||||
rc = image.info
|
||||
|
||||
|
||||
if OpenNebula.is_error?(rc)
|
||||
if rc.message.match("Error getting")
|
||||
return rc, 404
|
||||
@ -464,7 +483,7 @@ class OCCIServer < CloudServer
|
||||
|
||||
return "", 204
|
||||
end
|
||||
|
||||
|
||||
# Updates a STORAGE resource
|
||||
# request:: _Hash_ hash containing the data of the request
|
||||
# [return] _String_,_Integer_ Update confirmation msg or error,
|
||||
@ -476,10 +495,10 @@ class OCCIServer < CloudServer
|
||||
image = ImageOCCI.new(
|
||||
Image.build_xml(params[:id]),
|
||||
self.client)
|
||||
|
||||
|
||||
rc = image.info
|
||||
return rc, 400 if OpenNebula.is_error?(rc)
|
||||
|
||||
|
||||
if image_info['PERSISTENT'] && image_info['PUBLIC']
|
||||
error_msg = "It is not allowed more than one change per request"
|
||||
return OpenNebula::Error.new(error_msg), 400
|
||||
@ -501,4 +520,24 @@ class OCCIServer < CloudServer
|
||||
image.info
|
||||
return to_occi_xml(image, 202)
|
||||
end
|
||||
|
||||
# Get the representation of a USER
|
||||
# request:: _Hash_ hash containing the data of the request
|
||||
# [return] _String_,_Integer_ USER representation or error,
|
||||
# status code
|
||||
def get_user(request, params)
|
||||
# --- Get the USER ---
|
||||
user = UserOCCI.new(
|
||||
User.build_xml(params[:id]),
|
||||
self.client)
|
||||
|
||||
# --- Prepare XML Response ---
|
||||
rc = user.info
|
||||
|
||||
if OpenNebula.is_error?(rc)
|
||||
return rc, CloudServer::HTTP_ERROR_CODE[rc.errno]
|
||||
end
|
||||
|
||||
return to_occi_xml(user, 200)
|
||||
end
|
||||
end
|
||||
|
@ -144,6 +144,11 @@ get '/storage' do
|
||||
treat_response(result,rc)
|
||||
end
|
||||
|
||||
get '/user' do
|
||||
result,rc = @occi_server.get_users(request)
|
||||
treat_response(result,rc)
|
||||
end
|
||||
|
||||
###################################################
|
||||
# Entity Resources Methods
|
||||
###################################################
|
||||
@ -192,3 +197,8 @@ put '/storage/:id' do
|
||||
result,rc = @occi_server.put_storage(request, params)
|
||||
treat_response(result,rc)
|
||||
end
|
||||
|
||||
get '/user/:id' do
|
||||
result,rc = @occi_server.get_user(request, params)
|
||||
treat_response(result,rc)
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user