diff --git a/src/authm_mad/remotes/quota/quota.rb b/src/authm_mad/remotes/quota/quota.rb index 1f13234e45..466cfe5013 100644 --- a/src/authm_mad/remotes/quota/quota.rb +++ b/src/authm_mad/remotes/quota/quota.rb @@ -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 diff --git a/src/cloud/occi/lib/OCCIServer.rb b/src/cloud/occi/lib/OCCIServer.rb index 85a8f4432a..e666651546 100755 --- a/src/cloud/occi/lib/OCCIServer.rb +++ b/src/cloud/occi/lib/OCCIServer.rb @@ -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 diff --git a/src/cloud/occi/lib/occi-server.rb b/src/cloud/occi/lib/occi-server.rb index 06ac629054..d0d355dce9 100755 --- a/src/cloud/occi/lib/occi-server.rb +++ b/src/cloud/occi/lib/occi-server.rb @@ -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 \ No newline at end of file