1
0
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:
Daniel Molina 2011-10-14 15:52:54 +02:00
parent 20a0a78184
commit 5911824045
3 changed files with 71 additions and 22 deletions

View File

@ -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

View File

@ -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

View File

@ -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