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 +4 -0
- data/lib/vagrant-mutate/box/box.rb +1 -1
- data/lib/vagrant-mutate/box/virtualbox.rb +5 -1
- data/lib/vagrant-mutate/box_loader.rb +55 -55
- data/lib/vagrant-mutate/converter/converter.rb +0 -33
- data/lib/vagrant-mutate/mutate.rb +4 -0
- data/lib/vagrant-mutate/qemu.rb +37 -0
- data/lib/vagrant-mutate/version.rb +1 -1
- metadata +3 -2
data/CHANGELOG.md
CHANGED
@@ -12,7 +12,7 @@ module VagrantMutate
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def virtual_size
|
15
|
-
input_file = File.join( @dir,
|
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
|
-
|
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
|
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.
|
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-
|
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
|