module Cloudkeeper::Entities::Convertables::Ova

Constants

CONVERT_OUTPUT_FORMATS

Public Class Methods

extended(base) click to toggle source
Calls superclass method
# File lib/cloudkeeper/entities/convertables/ova.rb, line 7
def self.extended(base)
  raise Cloudkeeper::Errors::Convertables::ConvertabilityError, "#{base.inspect} cannot become OVA convertable" \
    unless base.class.included_modules.include?(Cloudkeeper::Entities::Convertables::Convertable)

  super
end

Public Instance Methods

convert_output_formats() click to toggle source
# File lib/cloudkeeper/entities/convertables/ova.rb, line 14
def convert_output_formats
  CONVERT_OUTPUT_FORMATS
end
to_vmdk() click to toggle source
# File lib/cloudkeeper/entities/convertables/ova.rb, line 18
def to_vmdk
  logger.debug "Converting file #{file.inspect} from #{format.inspect} to vmdk"
  image_file(extract_disk, :vmdk)
end

Private Instance Methods

archive_files() click to toggle source
# File lib/cloudkeeper/entities/convertables/ova.rb, line 55
def archive_files
  Cloudkeeper::CommandExecutioner.list_archive file
end
convert(output_format) click to toggle source
# File lib/cloudkeeper/entities/convertables/ova.rb, line 25
def convert(output_format)
  logger.debug "Converting file #{file.inspect} from #{format.inspect} to #{output_format.inspect}"
  vmdk_image = to_vmdk
  final_image = vmdk_image.send("to_#{output_format}".to_sym)
  File.delete vmdk_image.file

  final_image
end
disk_file() click to toggle source
# File lib/cloudkeeper/entities/convertables/ova.rb, line 59
def disk_file
  archive_files.each { |file| return file if Cloudkeeper::Entities::ImageFormats::Ova::VMDK_REGEX =~ file }
end
extract_disk() click to toggle source
# File lib/cloudkeeper/entities/convertables/ova.rb, line 34
def extract_disk
  archived_disk = disk_file
  archived_disk_sanitized = Cloudkeeper::Utils::Filename.sanitize archived_disk

  disk_directory = File.dirname(file)
  extracted_file = File.join(disk_directory, archived_disk)
  Cloudkeeper::CommandExecutioner.execute('tar', '-x', '-f', file, '-C', disk_directory, archived_disk)

  return extracted_file if archived_disk == archived_disk_sanitized

  extracted_file_sanitized = File.join(disk_directory, archived_disk_sanitized)
  logger.debug "Renaming file #{extracted_file.inspect} to #{extracted_file_sanitized.inspect}"
  File.rename extracted_file, extracted_file_sanitized

  extracted_file_sanitized
rescue Cloudkeeper::Errors::CommandExecutionError, ::SystemCallError => ex
  delete_if_exists extracted_file
  delete_if_exists extracted_file_sanitized
  raise ex
end