From d751456cfd659ffdc5fc67a74c6d043edecf7e9d Mon Sep 17 00:00:00 2001 From: Jaime Melis Date: Thu, 10 Mar 2016 17:21:10 +0100 Subject: [PATCH] Feature #4217: Remove image download functionality --- src/cli/oneimage | 13 ----- src/sunstone/models/SunstoneServer.rb | 74 ++++++--------------------- src/sunstone/sunstone-server.rb | 14 ++--- 3 files changed, 24 insertions(+), 77 deletions(-) diff --git a/src/cli/oneimage b/src/cli/oneimage index ce432ef57a..ea5b07b94f 100755 --- a/src/cli/oneimage +++ b/src/cli/oneimage @@ -176,19 +176,6 @@ cmd=CommandParser::CmdParser.new(ARGV) do end end - download_desc = <<-EOT.unindent - Downloads an image to a file - EOT - - command :download, download_desc, :imageid, :path, - :options => [OpenNebulaHelper::FORCE] do - - helper.perform_action(args[0],options,"downloaded") do |image| - download_args = [:image, args[0], args[1], options[:force]] - OpenNebulaHelper.download_resource_sunstone(*download_args) - end - end - delete_desc = <<-EOT.unindent Deletes the given Image EOT diff --git a/src/sunstone/models/SunstoneServer.rb b/src/sunstone/models/SunstoneServer.rb index 929c38f483..34b6da1c74 100644 --- a/src/sunstone/models/SunstoneServer.rb +++ b/src/sunstone/models/SunstoneServer.rb @@ -217,75 +217,35 @@ class SunstoneServer < CloudServer ############################################################################ # ############################################################################ - def download_resource(kind, id) - case kind - when "image" - # Get Image - image = Image.new(Image.build_xml(id.to_i), @client) - rc = image.info + def download_marketplaceapp(id) + # Get MarketPlaceApp + marketapp = MarketPlaceApp.new(MarketPlaceApp.build_xml(id.to_i), @client) - return [500, rc.message] if OpenNebula.is_error?(rc) + rc = marketapp.info + return [500, rc.message] if OpenNebula.is_error?(rc) - # Get Datastore - ds_id = image['DATASTORE_ID'] + # Get Datastore + market_id = marketapp['MARKETPLACE_ID'] - ds = Datastore.new(Datastore.build_xml(ds_id), @client) - rc = ds.info + market = MarketPlace.new(MarketPlace.build_xml(market_id), @client) + rc = market.info - return [500, rc.message] if OpenNebula.is_error?(rc) + return [500, rc.message] if OpenNebula.is_error?(rc) - # Build Driver message - drv_message = "" << - "#{image.to_xml}#{ds.to_xml}" << - "" + # Build Driver message + drv_message = "" << + "#{market.to_xml}" << + "" - drv_message_64 = Base64::strict_encode64(drv_message) + drv_message_64 = Base64::strict_encode64(drv_message) - begin - export = "#{VAR_LOCATION}/remotes/datastore/#{ds['DS_MAD']}/export" - - export_stdout = `#{export} #{drv_message_64} #{id}` - - doc = REXML::Document.new(export_stdout).root - - source = doc.elements['IMPORT_SOURCE'].text - rescue Exception => e - return [500, "#{e.message}\n#{e.backtrace}"] - end - when "marketplaceapp" - # Get MarketPlaceApp - marketapp = MarketPlaceApp.new(MarketPlaceApp.build_xml(id.to_i), @client) - - rc = marketapp.info - return [500, rc.message] if OpenNebula.is_error?(rc) - - # Get Datastore - market_id = marketapp['MARKETPLACE_ID'] - - market = MarketPlace.new(MarketPlace.build_xml(market_id), @client) - rc = market.info - - return [500, rc.message] if OpenNebula.is_error?(rc) - - # Build Driver message - drv_message = "" << - "#{market.to_xml}" << - "" - - drv_message_64 = Base64::strict_encode64(drv_message) - - source = marketapp['SOURCE'] - - else - return [404, "Unknown resource."] - end + source = marketapp['SOURCE'] download_cmd = "DRV_ACTION=#{drv_message_64} "<< "#{VAR_LOCATION}/remotes/datastore/downloader.sh " << "#{source} -" - - filename = "one-#{kind}-#{id}" + filename = "one-marketplaceapp-#{id}" return [download_cmd, filename] end diff --git a/src/sunstone/sunstone-server.rb b/src/sunstone/sunstone-server.rb index d3abe7c9ca..f32224dc8e 100755 --- a/src/sunstone/sunstone-server.rb +++ b/src/sunstone/sunstone-server.rb @@ -720,12 +720,10 @@ post '/upload_chunk' do end ############################################################################## -# Download image or marketapp +# Download marketplaceapp ############################################################################## -READ_LENGTH = 10*1024*1024 - -get '/:resource/:id/download' do - dl_resource = @SunstoneServer.download_resource(params[:resource], params[:id]) +get '/marketplaceapp/:id/download' do + dl_resource = @SunstoneServer.download_marketplaceapp(params[:id]) # If the first element of dl_resource is a number, it is the exit_code after # an error happend, so return it. @@ -734,8 +732,9 @@ get '/:resource/:id/download' do download_cmd, filename = dl_resource # Send headers - headers['Cache-Control'] = "no-transform" # Do not use Rack::Deflater + headers['Cache-Control'] = "no-transform" # Do not use Rack::Deflater headers['Content-Disposition'] = "attachment; filename=\"#{filename}\"" + content_type :'application/octet-stream' # Start stream @@ -743,7 +742,8 @@ get '/:resource/:id/download' do Open3.popen3(download_cmd) do |_,o,e,w| until o.eof? - out << o.read(READ_LENGTH) + # Read in chunks of 10MB + out << o.read(10*1024*1024) end if !w.value.success?