vagrant-mutate 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 0.2.2 (2014-01-05)
2
+ * Determine virtualbox disk filename from ovf (#30)
3
+ * Move Qemu checks to own class
4
+
1
5
  # 0.2.1 (2014-01-02)
2
6
  * Support kvm as input (#17)
3
7
 
@@ -12,7 +12,7 @@ module VagrantMutate
12
12
  end
13
13
 
14
14
  def virtual_size
15
- input_file = File.join( @dir, @image_name )
15
+ input_file = File.join( @dir, image_name )
16
16
  info = `qemu-img info #{input_file}`
17
17
  @logger.debug "qemu-img info output\n#{info}"
18
18
  if info =~ /(\d+) bytes/
@@ -11,7 +11,11 @@ module VagrantMutate
11
11
  @supported_input = true
12
12
  @supported_output = false
13
13
  @image_format = 'vmdk'
14
- @image_name = 'box-disk1.vmdk'
14
+ end
15
+
16
+ # this is usually box-disk1.vmdk but some tools like packer customize it
17
+ def image_name
18
+ ovf.elements['//References/File'].attributes['ovf:href']
15
19
  end
16
20
 
17
21
  # the architecture is not defined in the ovf file,
@@ -13,23 +13,6 @@ module VagrantMutate
13
13
  @tmp_files = []
14
14
  end
15
15
 
16
- def create_box(provider_name, name, dir)
17
- @logger.info "Creating box #{name} with provider #{provider_name} in #{dir}"
18
- case provider_name
19
- when 'kvm'
20
- require_relative 'box/kvm'
21
- Box::Kvm.new(@env, name, dir)
22
- when 'libvirt'
23
- require_relative 'box/libvirt'
24
- Box::Libvirt.new(@env, name, dir)
25
- when 'virtualbox'
26
- require_relative 'box/virtualbox'
27
- Box::Virtualbox.new(@env, name, dir)
28
- else
29
- raise Errors::ProviderNotSupported, :provider => provider_name, :direction => 'input or output'
30
- end
31
- end
32
-
33
16
  def prepare_for_output(name, provider_name)
34
17
  @logger.info "Preparing #{name} for output as #{provider_name}"
35
18
  dir = create_output_dir(name, provider_name)
@@ -128,6 +111,51 @@ module VagrantMutate
128
111
 
129
112
  private
130
113
 
114
+ def create_box(provider_name, name, dir)
115
+ @logger.info "Creating box #{name} with provider #{provider_name} in #{dir}"
116
+ case provider_name
117
+ when 'kvm'
118
+ require_relative 'box/kvm'
119
+ Box::Kvm.new(@env, name, dir)
120
+ when 'libvirt'
121
+ require_relative 'box/libvirt'
122
+ Box::Libvirt.new(@env, name, dir)
123
+ when 'virtualbox'
124
+ require_relative 'box/virtualbox'
125
+ Box::Virtualbox.new(@env, name, dir)
126
+ else
127
+ raise Errors::ProviderNotSupported, :provider => provider_name, :direction => 'input or output'
128
+ end
129
+ end
130
+
131
+ def create_output_dir(name, provider_name)
132
+ # e.g. $HOME/.vagrant.d/boxes/fedora-19/libvirt
133
+ out_dir = File.join( @env.boxes_path, name, provider_name )
134
+ begin
135
+ FileUtils.mkdir_p(out_dir)
136
+ rescue => e
137
+ raise Errors::CreateBoxDirFailed, :error_message => e.message
138
+ end
139
+ @logger.info "Created output directory #{out_dir}"
140
+ return out_dir
141
+ end
142
+
143
+ def unpack(file)
144
+ @env.ui.info "Extracting box file to a temporary directory."
145
+ unless File.exists? file
146
+ raise Errors::BoxNotFound, :box => file
147
+ end
148
+ tmp_dir = Dir.mktmpdir(nil, @env.tmp_path)
149
+ @tmp_files << tmp_dir
150
+ result = Vagrant::Util::Subprocess.execute(
151
+ "bsdtar", "-v", "-x", "-m", "-C", tmp_dir.to_s, "-f", file)
152
+ if result.exit_code != 0
153
+ raise Errors::ExtractBoxFailed, :error_message => result.stderr.to_s
154
+ end
155
+ @logger.info "Unpacked box to #{tmp_dir}"
156
+ return tmp_dir
157
+ end
158
+
131
159
  def determine_provider(dir)
132
160
  metadata_file = File.join(dir, 'metadata.json')
133
161
  if File.exists? metadata_file
@@ -154,6 +182,16 @@ module VagrantMutate
154
182
  end
155
183
  end
156
184
 
185
+ def verify_input_dir(provider_name, name)
186
+ input_dir = File.join( @env.boxes_path, name, provider_name)
187
+ if File.directory?(input_dir)
188
+ @logger.info "Found input directory #{input_dir}"
189
+ return input_dir
190
+ else
191
+ raise Errors::BoxNotFound, :box => input_dir
192
+ end
193
+ end
194
+
157
195
  def find_input_dir(name)
158
196
  box_parent_dir = File.join( @env.boxes_path, name)
159
197
 
@@ -177,43 +215,5 @@ module VagrantMutate
177
215
  end
178
216
  end
179
217
 
180
- def verify_input_dir(provider_name, name)
181
- input_dir = File.join( @env.boxes_path, name, provider_name)
182
- if File.directory?(input_dir)
183
- @logger.info "Found input directory #{input_dir}"
184
- return input_dir
185
- else
186
- raise Errors::BoxNotFound, :box => input_dir
187
- end
188
- end
189
-
190
- def create_output_dir(name, provider_name)
191
- # e.g. $HOME/.vagrant.d/boxes/fedora-19/libvirt
192
- out_dir = File.join( @env.boxes_path, name, provider_name )
193
- begin
194
- FileUtils.mkdir_p(out_dir)
195
- rescue => e
196
- raise Errors::CreateBoxDirFailed, :error_message => e.message
197
- end
198
- @logger.info "Created output directory #{out_dir}"
199
- return out_dir
200
- end
201
-
202
- def unpack(file)
203
- @env.ui.info "Extracting box file to a temporary directory."
204
- unless File.exists? file
205
- raise Errors::BoxNotFound, :box => file
206
- end
207
- tmp_dir = Dir.mktmpdir(nil, @env.tmp_path)
208
- @tmp_files << tmp_dir
209
- result = Vagrant::Util::Subprocess.execute(
210
- "bsdtar", "-v", "-x", "-m", "-C", tmp_dir.to_s, "-f", file)
211
- if result.exit_code != 0
212
- raise Errors::ExtractBoxFailed, :error_message => result.stderr.to_s
213
- end
214
- @logger.info "Unpacked box to #{tmp_dir}"
215
- return tmp_dir
216
- end
217
-
218
218
  end
219
219
  end
@@ -22,8 +22,6 @@ module VagrantMutate
22
22
  @input_box = input_box
23
23
  @output_box = output_box
24
24
  @logger = Log4r::Logger.new('vagrant::mutate')
25
- verify_qemu_installed
26
- verify_qemu_version
27
25
  end
28
26
 
29
27
  def convert()
@@ -42,37 +40,6 @@ module VagrantMutate
42
40
 
43
41
  private
44
42
 
45
- # http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
46
- def verify_qemu_installed
47
- exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
48
- ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
49
- exts.each do |ext|
50
- exe = File.join(path, "qemu-img#{ext}")
51
- if File.executable? exe
52
- @logger.info "Found qemu"
53
- return
54
- end
55
- end
56
- end
57
- # if we make it here qemu-img command was not found
58
- raise Errors::QemuNotFound
59
- end
60
-
61
- def verify_qemu_version
62
- usage = `qemu-img`
63
- if usage =~ /(\d+\.\d+\.\d+)/
64
- recommended_version = Gem::Version.new('1.2.0')
65
- installed_version = Gem::Version.new($1)
66
- if installed_version < recommended_version
67
- @env.ui.warn "You have qemu #{installed_version} installed. "\
68
- "This version is too old to read some virtualbox boxes. "\
69
- "If conversion fails, try upgrading to qemu 1.2.0 or newer."
70
- end
71
- else
72
- raise Errors::ParseQemuVersionFailed
73
- end
74
- end
75
-
76
43
 
77
44
  def write_metadata
78
45
  metadata = generate_metadata
@@ -1,4 +1,5 @@
1
1
  require 'vagrant-mutate/box_loader'
2
+ require 'vagrant-mutate/qemu'
2
3
  require 'vagrant-mutate/converter/converter'
3
4
 
4
5
  module VagrantMutate
@@ -20,6 +21,9 @@ module VagrantMutate
20
21
  box_arg = argv[0]
21
22
  output_provider_arg = argv[1]
22
23
 
24
+ Qemu.verify_qemu_installed
25
+ Qemu.verify_qemu_version(@env)
26
+
23
27
  input_loader = BoxLoader.new(@env)
24
28
  input_box = input_loader.load(box_arg)
25
29
 
@@ -0,0 +1,37 @@
1
+ module VagrantMutate
2
+ class Qemu
3
+
4
+ # http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
5
+ def self.verify_qemu_installed
6
+ logger = Log4r::Logger.new('vagrant::mutate')
7
+ exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
8
+ ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
9
+ exts.each do |ext|
10
+ exe = File.join(path, "qemu-img#{ext}")
11
+ if File.executable? exe
12
+ logger.info "Found qemu"
13
+ return
14
+ end
15
+ end
16
+ end
17
+ # if we make it here qemu-img command was not found
18
+ raise Errors::QemuNotFound
19
+ end
20
+
21
+ def self.verify_qemu_version(env)
22
+ usage = `qemu-img`
23
+ if usage =~ /(\d+\.\d+\.\d+)/
24
+ recommended_version = Gem::Version.new('1.2.0')
25
+ installed_version = Gem::Version.new($1)
26
+ if installed_version < recommended_version
27
+ env.ui.warn "You have qemu #{installed_version} installed. "\
28
+ "This version is too old to read some virtualbox boxes. "\
29
+ "If conversion fails, try upgrading to qemu 1.2.0 or newer."
30
+ end
31
+ else
32
+ raise Errors::ParseQemuVersionFailed
33
+ end
34
+ end
35
+
36
+ end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module VagrantMutate
2
- VERSION = '0.2.1'
2
+ VERSION = '0.2.2'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-mutate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-02 00:00:00.000000000 Z
12
+ date: 2014-01-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -67,6 +67,7 @@ files:
67
67
  - lib/vagrant-mutate/converter/libvirt.rb
68
68
  - lib/vagrant-mutate/errors.rb
69
69
  - lib/vagrant-mutate/mutate.rb
70
+ - lib/vagrant-mutate/qemu.rb
70
71
  - lib/vagrant-mutate/version.rb
71
72
  - locales/en.yml
72
73
  - templates/kvm/box.xml.erb