vagrant-mutate 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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