Class: Uricp::Strategy::LocalConvert

Inherits:
Object
  • Object
show all
Includes:
Common
Defined in:
lib/uricp/strategy/local_convert.rb

Constant Summary

Constants included from Common

Common::PIPE_URI

Instance Attribute Summary

Attributes included from Common

#proposed_options

Attributes included from CurlPrimitives

#options

Instance Method Summary collapse

Methods included from Common

#all_local_files?, #always_write_sparse?, #compression_required?, #conversion_required?, #encoding, #file_source?, #format_change?, #get_temp_filename, #initialize, #lz4?, #lz4_source?, #proposed_path, #qcow2?, #raw_target?, #segmented?, #sequence_complete?, #supported_source?, #temp_uri, #unsupported_transfer

Methods included from CurlPrimitives

#authentication, #curl_command, #curl_download_to_pipe, #curl_manifest, #curl_upload_from, #from, #from=, #http_authentication?, #to, #to=

Instance Method Details

#appropriate?Boolean

Returns:

  • (Boolean)


7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/uricp/strategy/local_convert.rb', line 7

def appropriate?
  if conversion_required? && file_source? && supported_source?
	if new_qemu? || supported_conversion?
	  return proposal
	else
	  raise Uricp::UnsupportedConversion,
 "qemu-img does not support required conversion"
	end
  end
  debug "#{self.class.name}: not appropriate"
  false
end

#commandObject



20
21
22
# File 'lib/uricp/strategy/local_convert.rb', line 20

def command
  qemu_img_command(proposed_path)
end

#compat_optionObject



61
62
63
# File 'lib/uricp/strategy/local_convert.rb', line 61

def compat_option
  "-o compat=0.10" if new_qemu?
end

#compress_optionObject



65
66
67
# File 'lib/uricp/strategy/local_convert.rb', line 65

def compress_option
  options['compress'] && '-c'
end

#conversion_optionsObject



50
51
52
53
54
55
56
57
58
59
# File 'lib/uricp/strategy/local_convert.rb', line 50

def conversion_options
  case options['target-format']
  when :raw
    '-O raw'
  when :qcow2
    "#{compress_option} -O qcow2 #{compat_option}"
  when :qcow3, :qcow2v3
    "#{compress_option} -O qcow2 -o compat=1.1"
  end
end

#new_qemu?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/uricp/strategy/local_convert.rb', line 38

def new_qemu?
  @new_qemu ||= !!(`qemu-img convert -O qcow2 -o ? a b` =~ /^compat/m)
end

#proposalObject



24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/uricp/strategy/local_convert.rb', line 24

def proposal
  @proposed_options = options.dup
  if to.scheme == 'file'
	@proposed_options['from_uri'] = @proposed_options['to_uri']
  else
    @proposed_options['from_uri'] = temp_uri
	@proposed_options['clean'] ||= []
	@proposed_options['clean'] << proposed_path
  end
  @proposed_options.delete('source-format')
  @proposed_options.delete('target-format')
  self
end

#qemu_img_command(target) ⇒ Object



46
47
48
# File 'lib/uricp/strategy/local_convert.rb', line 46

def qemu_img_command(target)
  "qemu-img convert #{conversion_options} #{from.path} #{target};"
end

#supported_conversion?Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/uricp/strategy/local_convert.rb', line 42

def supported_conversion?
  ([:qcow3, :qcow2v3] & [options['source-format'], options['target-format']]).empty?
end