module Cloudkeeper::One::ApplianceActions::Utils::ImageDownload
Public Instance Methods
download_image(uri, username, password)
click to toggle source
# File lib/cloudkeeper/one/appliance_actions/utils/image_download.rb, line 8 def download_image(uri, username, password) return generate_url uri, username, password if Cloudkeeper::One::Settings[:'opennebula-allow-remote-source'] filename = generate_filename retrieve_image URI.parse(uri), username, password, filename filename rescue URI::InvalidURIError => ex raise Cloudkeeper::One::Errors::NetworkConnectionError, ex end
Private Instance Methods
generate_filename()
click to toggle source
# File lib/cloudkeeper/one/appliance_actions/utils/image_download.rb, line 39 def generate_filename File.join(Cloudkeeper::One::Settings[:'appliances-tmp-dir'], SecureRandom.uuid) end
generate_url(uri, username, password)
click to toggle source
# File lib/cloudkeeper/one/appliance_actions/utils/image_download.rb, line 43 def generate_url(uri, username, password) url = URI.parse(uri) url.user = username url.password = password logger.debug "Generating remote source URL: #{url.to_s.inspect}" url.to_s end
retrieve_image(uri, username, password, filename)
click to toggle source
# File lib/cloudkeeper/one/appliance_actions/utils/image_download.rb, line 21 def retrieve_image(uri, username, password, filename) logger.debug "Downloading image from #{uri.inspect} (username: #{username}, password: #{password})" use_ssl = uri.scheme == 'https' Net::HTTP.start(uri.host, uri.port, use_ssl: use_ssl) do |http| request = Net::HTTP::Get.new(uri) request.basic_auth username, password http.request(request) do |response| response.value File.open(filename, 'w') { |file| response.read_body { |chunk| file.write(chunk) } } end end logger.debug "Image stored into #{filename}" rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, Errno::ECONNREFUSED, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, EOFError, Net::HTTPServerException, Net::HTTPRetriableError => ex raise Cloudkeeper::One::Errors::NetworkConnectionError, ex end