Class: Itchy::ImageTransformer

Inherits:
Object
  • Object
show all
Defined in:
lib/itchy/image_transformer.rb

Overview

Wraps image format conversion methods and helpers.

Constant Summary collapse

KNOWN_IMAGE_ARCHIVES =

Registered image formats and archives

%w(ova tar).freeze
KNOWN_IMAGE_FORMATS =
%w(cow dmg parallels qcow qcow2 raw vdi vmdk vhd).freeze
ARCHIVE_STRING =

Archive format string msg

'POSIX tar archive'
FORMAT_PATTERN =

REGEX pattern for getting image format

/format:\s(.*?)$/

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ ImageTransformer

Creates a class instance.

Parameters:

  • options (Hash) (defaults to: {})

    configuration options



17
18
19
20
21
22
23
24
25
# File 'lib/itchy/image_transformer.rb', line 17

def initialize(options = {})
  @options = options
  @inputs = ([] << KNOWN_IMAGE_FORMATS << KNOWN_IMAGE_ARCHIVES).flatten

  #fail ArgumentError, 'Unsupported input image format enabled in configuration! ' \
  #     "#{@inputs.inspect}" unless (@options.input_image_formats - @inputs).empty?
  # fail "Unsupported output image format enabled in configuration! " \
  #     "#{KNOWN_IMAGE_FORMATS.inspect}" unless (@options.required_format - KNOWN_IMAGE_FORMATS).empty?
end

Instance Method Details

#transform!(metadata, vmcatcher_configuration) ⇒ String

Transforms image(s) associated with the given event to formats preferred by the underlying image datastore. This process includes unpacking of archive & conversion of image files.

Parameters:

Returns:

  • (String)

    directory with converted images for further processing



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/itchy/image_transformer.rb', line 34

def transform!(, vmcatcher_configuration)
  Itchy::Log.info "[#{self.class.name}] Transforming image format " \
                         "for #{.dc_identifier.inspect}"
  begin
    if archived?(.dc_identifier.inspect)
      unpacking_dir = unpack_archived!(, vmcatcher_configuration)
      file_format = inspect_unpacked_dir(unpacking_dir, )
    else
      file_format = format(orig_image_file(, vmcatcher_configuration))
      unpacking_dir = copy_unpacked!(, vmcatcher_configuration)
    end
    if file_format == @options.required_format
      new_file_name = copy_same_format(unpacking_dir, )
    else
      converter = Itchy::FormatConverter.new(unpacking_dir, , vmcatcher_configuration)
      new_file_name = converter.convert!(file_format, @options.required_format, @options.output_dir)
    end
  rescue Itchy::Errors::FileInspectError, Itchy::Errors::FormatConversionError,
         Itchy::Errors::PrepareEnvError => ex
    fail Itchy::Errors::ImageTransformationError, ex
  end
  new_file_name
end