vagrant-mutate 1.1.0 → 1.2.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/README.md +3 -6
- data/lib/vagrant-mutate.rb +14 -0
- data/lib/vagrant-mutate/box/bhyve.rb +19 -0
- data/lib/vagrant-mutate/box/kvm.rb +3 -3
- data/lib/vagrant-mutate/box_loader.rb +3 -0
- data/lib/vagrant-mutate/converter/bhyve.rb +40 -0
- data/lib/vagrant-mutate/converter/converter.rb +7 -2
- data/lib/vagrant-mutate/converter/kvm.rb +13 -6
- data/lib/vagrant-mutate/qemu.rb +6 -12
- data/lib/vagrant-mutate/version.rb +1 -1
- data/test/expected_output/virtualbox/bhyve/Vagrantfile +6 -0
- data/test/expected_output/virtualbox/bhyve/disk.img +0 -0
- data/test/expected_output/virtualbox/bhyve/metadata.json +1 -0
- data/test/test.rb +1 -1
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db1c439fc85325283fe530d325f2b5da691903c6
|
4
|
+
data.tar.gz: 8d7fcc03d6d5415b56c9cc0cdc136d305d676f1e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad16f50d0c9cfd2882e5976b994af9ba7bff1313765b22bbac08180c99d9c29f34e690cfb001d47406afaf94f4b5a77afc9dca85e1982d0bb1ec10bcb123b7aa
|
7
|
+
data.tar.gz: fee91995f7fc4abe26638233a10fc1ad90851963af01154c8de7194218ab03ebe2e7498b94d9a89b6c2ba0994a662c628f8db7123920e627d8f49a7b44ffccfc
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -6,16 +6,13 @@ Vagrant-mutate is a vagrant plugin to convert vagrant boxes to work with differe
|
|
6
6
|
|
7
7
|
* Virtualbox to kvm
|
8
8
|
* Virtualbox to libvirt
|
9
|
+
* Virtualbox to bhyve
|
9
10
|
* Libvirt to kvm
|
10
11
|
* Kvm to libvirt
|
11
12
|
|
12
13
|
## Compatibility
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
* [vagrant](http://www.vagrantup.com) 1.3.5, 1.4.3, and 1.5.4
|
17
|
-
* [vagrant-kvm](https://github.com/adrahon/vagrant-kvm) 0.1.4
|
18
|
-
* [vagrant-libvirt](https://github.com/pradels/vagrant-libvirt) 0.0.11
|
15
|
+
Vagrant-mutate 0.3 and later requires Vagrant 1.5. If you are using an older vagrant, install vagrant-mutate version 0.2.6.
|
19
16
|
|
20
17
|
## Installation
|
21
18
|
|
@@ -25,7 +22,7 @@ First, you must install [qemu-img](http://wiki.qemu.org/Main_Page) and the libvi
|
|
25
22
|
|
26
23
|
#### Debian and derivatives
|
27
24
|
|
28
|
-
apt-get install qemu-utils libvirt-dev
|
25
|
+
apt-get install qemu-utils libvirt-dev ruby-dev
|
29
26
|
|
30
27
|
#### Red Hat and derivatives
|
31
28
|
|
data/lib/vagrant-mutate.rb
CHANGED
@@ -6,6 +6,20 @@ module VagrantMutate
|
|
6
6
|
@source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
|
7
7
|
end
|
8
8
|
|
9
|
+
# http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
|
10
|
+
def self.find_bin(bin)
|
11
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
12
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
13
|
+
exts.each do |ext|
|
14
|
+
exe = File.join(path, "#{bin}#{ext}")
|
15
|
+
if File.executable? exe
|
16
|
+
return exe if File.executable?(exe) && !File.directory?(exe)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
return nil
|
21
|
+
end
|
22
|
+
|
9
23
|
class Plugin < Vagrant.plugin('2')
|
10
24
|
name 'vagrant-mutate'
|
11
25
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative 'box'
|
2
|
+
|
3
|
+
module VagrantMutate
|
4
|
+
module Box
|
5
|
+
class Bhyve < Box
|
6
|
+
def initialize(env, name, version, dir)
|
7
|
+
super
|
8
|
+
@provider_name = 'bhyve'
|
9
|
+
@supported_input = true
|
10
|
+
@supported_output = true
|
11
|
+
@image_format = 'raw'
|
12
|
+
@image_name = 'disk.img'
|
13
|
+
end
|
14
|
+
|
15
|
+
# TODO
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require_relative 'box'
|
2
|
-
require '
|
2
|
+
require 'nokogiri'
|
3
3
|
|
4
4
|
module VagrantMutate
|
5
5
|
module Box
|
@@ -20,8 +20,8 @@ module VagrantMutate
|
|
20
20
|
def disk_interface
|
21
21
|
domain_file = File.join(@dir, 'box.xml')
|
22
22
|
begin
|
23
|
-
domain =
|
24
|
-
domain.
|
23
|
+
domain = File.open(domain_file) { |f| Nokogiri::XML(f) }
|
24
|
+
domain.xpath("//*[local-name()='domain']/*[local-name()='devices']/*[local-name()='disk']/*[local-name()='target']").attribute('bus')
|
25
25
|
rescue => e
|
26
26
|
raise Errors::BoxAttributeError, error_message: e.message
|
27
27
|
end
|
@@ -137,6 +137,9 @@ module VagrantMutate
|
|
137
137
|
def create_box(provider_name, name, version, dir)
|
138
138
|
@logger.info "Creating box #{name} with provider #{provider_name} and version #{version} in #{dir}"
|
139
139
|
case provider_name
|
140
|
+
when 'bhyve'
|
141
|
+
require_relative 'box/bhyve'
|
142
|
+
Box::Bhyve.new(@env, name, version, dir)
|
140
143
|
when 'kvm'
|
141
144
|
require_relative 'box/kvm'
|
142
145
|
Box::Kvm.new(@env, name, version, dir)
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'erb'
|
2
|
+
|
3
|
+
module VagrantMutate
|
4
|
+
module Converter
|
5
|
+
class Bhyve < Converter
|
6
|
+
def generate_metadata
|
7
|
+
|
8
|
+
output_name = File.join(@output_box.dir, @output_box.image_name).shellescape
|
9
|
+
|
10
|
+
file_output = `file #{output_name}`
|
11
|
+
|
12
|
+
if file_output.include? "GRUB"
|
13
|
+
loader = "grub-bhyve"
|
14
|
+
else
|
15
|
+
loader = "bhyveload"
|
16
|
+
end
|
17
|
+
|
18
|
+
{
|
19
|
+
"provider" => @output_box.provider_name,
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def generate_vagrantfile
|
24
|
+
memory = @input_box.memory / 1024 / 1024 # convert bytes to mebibytes
|
25
|
+
cpus = @input_box.cpus
|
26
|
+
<<-EOF
|
27
|
+
config.vm.provider :bhyve do |vm|
|
28
|
+
vm.memory = "#{memory}M"
|
29
|
+
vm.cpus = "#{cpus}"
|
30
|
+
end
|
31
|
+
EOF
|
32
|
+
end
|
33
|
+
|
34
|
+
def write_specific_files
|
35
|
+
# nothing yet
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -6,6 +6,9 @@ module VagrantMutate
|
|
6
6
|
class Converter
|
7
7
|
def self.create(env, input_box, output_box, force_virtio='false')
|
8
8
|
case output_box.provider_name
|
9
|
+
when 'bhyve'
|
10
|
+
require_relative 'bhyve'
|
11
|
+
Bhyve.new(env, input_box, output_box)
|
9
12
|
when 'kvm'
|
10
13
|
require_relative 'kvm'
|
11
14
|
Kvm.new(env, input_box, output_box)
|
@@ -34,10 +37,10 @@ module VagrantMutate
|
|
34
37
|
"to #{@output_box.provider_name}."
|
35
38
|
|
36
39
|
@input_box.verify_format
|
40
|
+
write_disk
|
37
41
|
write_metadata
|
38
42
|
write_vagrantfile
|
39
43
|
write_specific_files
|
40
|
-
write_disk
|
41
44
|
end
|
42
45
|
|
43
46
|
private
|
@@ -97,7 +100,9 @@ module VagrantMutate
|
|
97
100
|
qemu_options = '-p -S 16k'
|
98
101
|
qemu_version = Qemu.qemu_version()
|
99
102
|
if qemu_version >= Gem::Version.new('1.1.0')
|
100
|
-
|
103
|
+
if output_format == 'qcow2'
|
104
|
+
qemu_options += ' -o compat=1.1'
|
105
|
+
end
|
101
106
|
end
|
102
107
|
|
103
108
|
command = "qemu-img convert #{qemu_options} -O #{output_format} #{input_file} #{output_file}"
|
@@ -43,15 +43,22 @@ module VagrantMutate
|
|
43
43
|
private
|
44
44
|
|
45
45
|
def find_kvm
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
'
|
50
|
-
'
|
51
|
-
|
46
|
+
qemu_bin = nil
|
47
|
+
|
48
|
+
qemu_bin_list = ['qemu-system-x86_64',
|
49
|
+
'qemu-system-i386',
|
50
|
+
'qemu-kvm',
|
51
|
+
'kvm']
|
52
|
+
logger = Log4r::Logger.new('vagrant::mutate')
|
53
|
+
qemu_bin_list.each do |qemu|
|
54
|
+
qemu_bin = VagrantMutate.find_bin(qemu)
|
55
|
+
break
|
56
|
+
end
|
57
|
+
|
52
58
|
unless qemu_bin
|
53
59
|
fail Errors::QemuNotFound
|
54
60
|
end
|
61
|
+
logger.info 'Found qemu_bin: ' + qemu_bin
|
55
62
|
qemu_bin
|
56
63
|
end
|
57
64
|
|
data/lib/vagrant-mutate/qemu.rb
CHANGED
@@ -1,20 +1,14 @@
|
|
1
1
|
module VagrantMutate
|
2
2
|
class Qemu
|
3
|
-
# http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
|
4
3
|
def self.verify_qemu_installed
|
4
|
+
qemu_img_bin = nil
|
5
5
|
logger = Log4r::Logger.new('vagrant::mutate')
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
exe = File.join(path, "qemu-img#{ext}")
|
10
|
-
if File.executable? exe
|
11
|
-
logger.info 'Found qemu'
|
12
|
-
return
|
13
|
-
end
|
14
|
-
end
|
6
|
+
qemu_img_bin = VagrantMutate.find_bin("qemu-img")
|
7
|
+
unless qemu_img_bin
|
8
|
+
fail Errors::QemuImgNotFound
|
15
9
|
end
|
16
|
-
|
17
|
-
|
10
|
+
logger.info 'Found qemu-img: ' + qemu_img_bin
|
11
|
+
qemu_img_bin
|
18
12
|
end
|
19
13
|
|
20
14
|
def self.qemu_version()
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
{"provider":"bhyve"}
|
data/test/test.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-mutate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Pitts
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,11 +52,13 @@ files:
|
|
52
52
|
- README.md
|
53
53
|
- Rakefile
|
54
54
|
- lib/vagrant-mutate.rb
|
55
|
+
- lib/vagrant-mutate/box/bhyve.rb
|
55
56
|
- lib/vagrant-mutate/box/box.rb
|
56
57
|
- lib/vagrant-mutate/box/kvm.rb
|
57
58
|
- lib/vagrant-mutate/box/libvirt.rb
|
58
59
|
- lib/vagrant-mutate/box/virtualbox.rb
|
59
60
|
- lib/vagrant-mutate/box_loader.rb
|
61
|
+
- lib/vagrant-mutate/converter/bhyve.rb
|
60
62
|
- lib/vagrant-mutate/converter/converter.rb
|
61
63
|
- lib/vagrant-mutate/converter/kvm.rb
|
62
64
|
- lib/vagrant-mutate/converter/libvirt.rb
|
@@ -73,6 +75,9 @@ files:
|
|
73
75
|
- test/expected_output/libvirt/kvm/box-disk1.img
|
74
76
|
- test/expected_output/libvirt/kvm/box.xml
|
75
77
|
- test/expected_output/libvirt/kvm/metadata.json
|
78
|
+
- test/expected_output/virtualbox/bhyve/Vagrantfile
|
79
|
+
- test/expected_output/virtualbox/bhyve/disk.img
|
80
|
+
- test/expected_output/virtualbox/bhyve/metadata.json
|
76
81
|
- test/expected_output/virtualbox/kvm/Vagrantfile
|
77
82
|
- test/expected_output/virtualbox/kvm/box-disk1.img
|
78
83
|
- test/expected_output/virtualbox/kvm/box.xml
|
@@ -117,6 +122,9 @@ test_files:
|
|
117
122
|
- test/expected_output/libvirt/kvm/box-disk1.img
|
118
123
|
- test/expected_output/libvirt/kvm/box.xml
|
119
124
|
- test/expected_output/libvirt/kvm/metadata.json
|
125
|
+
- test/expected_output/virtualbox/bhyve/Vagrantfile
|
126
|
+
- test/expected_output/virtualbox/bhyve/disk.img
|
127
|
+
- test/expected_output/virtualbox/bhyve/metadata.json
|
120
128
|
- test/expected_output/virtualbox/kvm/Vagrantfile
|
121
129
|
- test/expected_output/virtualbox/kvm/box-disk1.img
|
122
130
|
- test/expected_output/virtualbox/kvm/box.xml
|