1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-26 06:50:09 +03:00

Remove unnecessary OCCI.rb and OCCIConfiguration.rb

Fixing some bugs and missuse of CloudServer.rb

git-svn-id: http://svn.opennebula.org/one/trunk@869 3034c82b-c49b-4eb3-8279-a7acafdc01c0
This commit is contained in:
Constantino Vázquez Blanco 2009-10-20 02:01:57 +00:00
parent 7ae228c712
commit a3af18e416
6 changed files with 41 additions and 162 deletions

View File

@ -487,10 +487,8 @@ ECO_ETC_TEMPLATE_FILES="src/cloud/ec2/etc/templates/m1.small.erb"
# OCCI files
#-----------------------------------------------------------------------------
OCCI_LIB_FILES="src/cloud/occi/lib/OCCI.rb \
src/cloud/occi/lib/OCCIServer.rb \
OCCI_LIB_FILES="src/cloud/occi/lib/OCCIServer.rb \
src/cloud/occi/lib/occi-server.rb \
src/cloud/occi/lib/OCCIConfiguration.rb \
src/cloud/occi/lib/OCCIClient.rb \
src/cloud/occi/lib/VirtualMachineOCCI.rb \
src/cloud/occi/lib/VirtualMachinePoolOCCI.rb \

View File

@ -125,6 +125,7 @@ class CloudServer
}
return user
end
###########################################################################
# Repository Methods

View File

@ -1,28 +0,0 @@
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
# not use this file except in compliance with the License. You may obtain #
# a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
#--------------------------------------------------------------------------- #
require 'VirtualMachineOCCI'
require 'VirtualMachinePoolOCCI'
require 'VirtualNetworkOCCI'
require 'VirtualNetworkPoolOCCI'
require 'ImageOCCI'
require 'ImagePoolOCCI'
require 'OCCIConfiguration'
include ImageOCCI

View File

@ -1,89 +0,0 @@
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
# not use this file except in compliance with the License. You may obtain #
# a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
#--------------------------------------------------------------------------- #
class OCCIConfiguration
NAME_REG=/[\w\d_-]+/
VARIABLE_REG=/\s*(#{NAME_REG})\s*=\s*/
SIMPLE_VARIABLE_REG=/#{VARIABLE_REG}([^\[]+?)(#.*)?/
SINGLE_VARIABLE_REG=/^#{SIMPLE_VARIABLE_REG}$/
ARRAY_VARIABLE_REG=/^#{VARIABLE_REG}\[(.*?)\]/m
def initialize(file)
@conf=parse_conf(file)
end
def add_value(conf, key, value)
if conf[key]
if !conf[key].kind_of?(Array)
conf[key]=[conf[key]]
end
conf[key]<<value
else
conf[key]=value
end
end
def parse_conf(file)
conf_file=File.read(file)
conf=Hash.new
conf_file.scan(SINGLE_VARIABLE_REG) {|m|
key=m[0].strip.upcase
value=m[1].strip
# hack to skip multiline VM_TYPE values
next if %w{NAME TEMPLATE}.include? key.upcase
add_value(conf, key, value)
}
conf_file.scan(ARRAY_VARIABLE_REG) {|m|
master_key=m[0].strip.upcase
pieces=m[1].split(',')
vars=Hash.new
pieces.each {|p|
key, value=p.split('=')
vars[key.strip.upcase]=value.strip
}
add_value(conf, master_key, vars)
}
conf
end
def conf
@conf
end
def [](key)
@conf[key.to_s.upcase]
end
end
if $0 == __FILE__
require 'pp'
conf=OCCIConfiguration.new('occi-server.conf')
pp conf.conf
end

View File

@ -15,15 +15,26 @@
# limitations under the License. #
#--------------------------------------------------------------------------- #
# Common cloud libs
require 'rubygems'
require 'sinatra'
require 'CloudServer'
# OCA
require 'OpenNebula'
require 'cloud/occi/OCCI'
include OpenNebula
# OCCI libs
require 'VirtualMachineOCCI'
require 'VirtualMachinePoolOCCI'
require 'VirtualNetworkOCCI'
require 'VirtualNetworkPoolOCCI'
require 'ImageOCCI'
require 'ImagePoolOCCI'
include ImageOCCI
##############################################################################
# The OCCI Server provides an OCCI implementation based on the
# OpenNebula Engine
@ -45,15 +56,12 @@ class OCCIServer < CloudServer
# [return] _Boolean_ Whether the user is authorized or not
def authenticate?(requestenv)
auth ||= Rack::Auth::Basic::Request.new(requestenv)
pp auth
return
if !(auth.provided? && auth.basic? && auth.credentials)
return false
end
user = get_user(auth.credentials.first)
user = get_user(requestenv, auth)
if user
if user[:password] == auth.credentials[1]
@ -67,8 +75,8 @@ class OCCIServer < CloudServer
# Retrieve the user crendentials
# requestenv:: _Hash_ Hash containing the environment of the request
# [return] _User_ User structure
def get_user(requestenv)
auth = Rack::Auth::Basic::Request.new(requestenv)
def get_user(requestenv, auth=nil)
auth = Rack::Auth::Basic::Request.new(requestenv) if !auth
super(auth.credentials.first)
end
@ -241,7 +249,6 @@ class OCCIServer < CloudServer
begin
network_pool.to_occi(@config[:server]+":"+@config[:port])
rescue Exception => e
status 500
error = OpenNebula::Error.new(e.message)
return error, 500
end
@ -273,12 +280,8 @@ class OCCIServer < CloudServer
# tmpfile where the file is stored
f_tmp=file[:tempfile]
img=$repoman.add(user[:id], f_tmp.path)
f_tmp.unlink
img.get_image_info
img.change_metadata(:name=>image_info['DISK']['NAME'])
img.change_metadata(:description=>image_info['DISK']['URL'])
img=add_image(user[:id], f_tmp, {:name=>image_info['DISK']['NAME'],
:description=>image_info['DISK']['URL']})
img.extend(ImageOCCI)
xml_response = img.to_occi
@ -313,7 +316,7 @@ class OCCIServer < CloudServer
result=vm.info
if OpenNebula::is_error?(result)
return "Error: "+result.message, 404
return result, 404
end
begin
@ -340,9 +343,7 @@ class OCCIServer < CloudServer
result = vm.finalize
if OpenNebula::is_error?(result)
error_msg = "Deletion failed. Reason: " + e.message
error = OpenNebula::Error.new(error_msg)
return error, 500
return result, 500
else
return "The Compute resource has been successfully deleted", 200
end
@ -415,8 +416,7 @@ class OCCIServer < CloudServer
result=vn.info
if OpenNebula::is_error?(result)
error = OpenNebula::Error.new("Error: "+result.message)
return error, 404
return result, 404
end
begin
@ -442,8 +442,7 @@ class OCCIServer < CloudServer
result = vn.delete
if OpenNebula::is_error?(result)
error = OpenNebula::Error.new("Error: " + result.message)
return error, 500
return result, 500
else
return "The Virtual Network has been successfully deleted", 200
end
@ -460,8 +459,6 @@ class OCCIServer < CloudServer
image=$repoman.get(request.params[:id])
if image
image.get_image_info
image.extend(ImageOCCI)
return image.to_occi, 200
else
@ -475,7 +472,7 @@ class OCCIServer < CloudServer
# request:: _Hash_ hash containing the data of the request
# [return] _String_,_Integer_ Delete confirmation msg or error,
# status code
def delete_network(request)
def delete_storage(request)
error = OpenNebula::Error.new("Not yet implemented")
return error, 501
end

View File

@ -64,14 +64,14 @@ set :port, $occi_server.config[:port]
# Authentication
before do
if !$occi_server.authenticate?(params)
if !$occi_server.authenticate?(request.env)
halt 401, 'Invalid credentials'
end
end
# Response treatment
helpers do
def treat_response
def treat_response(result,rc)
if OpenNebula::is_error?(result)
halt rc, result.message
end
@ -91,32 +91,32 @@ end
post '/compute' do
result,rc = $occi_server.post_compute(request)
treat_response
treat_response(result,rc)
end
get '/compute' do
result,rc = $occi_server.get_compute(request)
treat_response
result,rc = $occi_server.get_computes(request)
treat_response(result,rc)
end
post '/network' do
result,rc = $occi_server.get_compute(request)
treat_response
treat_response(result,rc)
end
get '/network' do
result,rc = $occi_server.get_network(request)
treat_response
treat_response(result,rc)
end
post '/storage' do
result,rc = $occi_server.post_storage(request)
treat_response
treat_response(result,rc)
end
get '/storage' do
result,rc = $occi_server.get_storages(request)
treat_response
treat_response(result,rc)
end
###################################################
@ -125,35 +125,35 @@ end
get '/compute/:id' do
result,rc = $occi_server.get_compute(request)
treat_response
treat_response(result,rc)
end
delete '/compute/:id' do
result,rc = $occi_server.delete_compute(request)
treat_response
treat_response(result,rc)
end
put '/compute/:id' do
result,rc = $occi_server.put_compute(request)
treat_response
treat_response(result,rc)
end
get '/network/:id' do
result,rc = $occi_server.get_network(request)
treat_response
treat_response(result,rc)
end
delete '/network/:id' do
result,rc = $occi_server.delete_network(request)
treat_response
treat_response(result,rc)
end
get '/storage/:id' do
result,rc = $occi_server.get_storage(request)
treat_response
treat_response(result,rc)
end
delete '/storage/:id' do
result,rc = $occi_server.delete_storage(request)
treat_response
treat_response(result,rc)
end