vagrant-mutate 0.2.6 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ # 0.3.0 (2014-05-04)
2
+ * Support Vagrant 1.5 with unversioned boxes (#47)
3
+ * Drop support for Vagrant < 1.5
4
+ * Move input provider specifier into own option
5
+ * Warn if user provided identifier for Vagrant Cloud
6
+
1
7
  # 0.2.6 (2014-05-04)
2
8
  * Include CentOS 6.5/RHEL 6.5-friendly Qemu paths (#50)
3
9
 
data/README.md CHANGED
@@ -11,14 +11,16 @@ Vagrant-mutate is a vagrant plugin to convert vagrant boxes to work with differe
11
11
 
12
12
  ## Compatibility
13
13
 
14
- Vagrant-mutate is not yet compatible with Vagrant 1.5.
14
+ Vagrant-mutate 0.3 and later requires Vagrant 1.5. If you are using an older vagrant, install vagrant-mutate version 0.2.6.
15
15
 
16
- Vagrant-mutate has been tested against the following versions. It may work with other versions too.
16
+ Throughout its development vagrant-mutate has been tested against the following versions. It may work with other versions too.
17
17
 
18
- * [vagrant](http://www.vagrantup.com) 1.3.5 and 1.4.3
18
+ * [vagrant](http://www.vagrantup.com) 1.3.5, 1.4.3, and 1.5.4
19
19
  * [vagrant-kvm](https://github.com/adrahon/vagrant-kvm) 0.1.4
20
20
  * [vagrant-libvirt](https://github.com/pradels/vagrant-libvirt) 0.0.11
21
21
 
22
+ Vagrant-mutate does not yet fully support [versioned boxes](http://docs.vagrantup.com/v2/boxes/versioning.html). It always assumes a box has the version *0*.
23
+
22
24
  ## Installation
23
25
 
24
26
  ### qemu-img
@@ -67,12 +69,12 @@ Or if you had already added the box to vagrant and now want to use it with libvi
67
69
 
68
70
  vagrant mutate precise32 libvirt
69
71
 
70
- If you have a box for multiple providers, you must specify the provider to use for input by prepending it to the name with a slash, e.g.
72
+ If you have a box for multiple providers, you must specify the provider to use for input using the *--input_provider* option, e.g.
71
73
 
72
74
  $ vagrant box list
73
75
  precise32 (kvm)
74
76
  precise32 (virtualbox)
75
- $ vagrant mutate virtualbox/precise32 libvirt
77
+ $ vagrant mutate --input_provider=virtualbox precise32 libvirt
76
78
 
77
79
  To export a box you created with vagrant mutate, just repackage it, e.g.
78
80
 
@@ -25,13 +25,15 @@ module VagrantMutate
25
25
  end
26
26
  end
27
27
 
28
- def load(box_arg)
28
+ def load(box_arg, provider_name)
29
29
  if box_arg =~ /:\/\//
30
30
  box = load_from_url(box_arg)
31
31
  elsif File.file?(box_arg)
32
32
  box = load_from_file(box_arg)
33
+ elsif box_arg =~ /\//
34
+ raise Errors::CloudNotSupported
33
35
  else
34
- box = load_from_boxes_path(box_arg)
36
+ box = load_from_boxes_path(box_arg, provider_name)
35
37
  end
36
38
 
37
39
  if box.supported_input
@@ -88,9 +90,8 @@ module VagrantMutate
88
90
  box = create_box(provider_name, name, dir)
89
91
  end
90
92
 
91
- def load_from_boxes_path(identifier)
92
- @logger.info "Loading box #{identifier} from vagrants box path"
93
- provider_name, name = parse_identifier(identifier)
93
+ def load_from_boxes_path(name, provider_name)
94
+ @logger.info "Loading box #{name} from vagrants box path"
94
95
  if provider_name
95
96
  dir = verify_input_dir(provider_name, name)
96
97
  else
@@ -129,8 +130,9 @@ module VagrantMutate
129
130
  end
130
131
 
131
132
  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 )
133
+ # e.g. $HOME/.vagrant.d/boxes/fedora-19/0/libvirt
134
+ # TODO support versioned boxes
135
+ out_dir = File.join( @env.boxes_path, name, '0', provider_name )
134
136
  begin
135
137
  FileUtils.mkdir_p(out_dir)
136
138
  rescue => e
@@ -142,7 +144,7 @@ module VagrantMutate
142
144
 
143
145
  def unpack(file)
144
146
  @env.ui.info "Extracting box file to a temporary directory."
145
- unless File.exists? file
147
+ unless File.exist? file
146
148
  raise Errors::BoxNotFound, :box => file
147
149
  end
148
150
  tmp_dir = Dir.mktmpdir(nil, @env.tmp_path)
@@ -158,7 +160,7 @@ module VagrantMutate
158
160
 
159
161
  def determine_provider(dir)
160
162
  metadata_file = File.join(dir, 'metadata.json')
161
- if File.exists? metadata_file
163
+ if File.exist? metadata_file
162
164
  begin
163
165
  metadata = JSON.load( File.new( metadata_file, 'r') )
164
166
  rescue => e
@@ -172,22 +174,9 @@ module VagrantMutate
172
174
  end
173
175
  end
174
176
 
175
- def parse_identifier(identifier)
176
- split_id = identifier.split('/')
177
- case split_id.length
178
- when 2
179
- @logger.info "Parsed provider name as #{split_id[0]} and box name as #{split_id[1]}"
180
- return split_id[0], split_id[1]
181
- when 1
182
- @logger.info "Parsed provider name as not given and box name as #{identifier}"
183
- return nil, identifier
184
- else
185
- raise Errors::ParseIdentifierFailed, :identifier => identifier
186
- end
187
- end
188
-
189
177
  def verify_input_dir(provider_name, name)
190
- input_dir = File.join( @env.boxes_path, name, provider_name)
178
+ # TODO support versioned boxes
179
+ input_dir = File.join( @env.boxes_path, name, '0', provider_name)
191
180
  if File.directory?(input_dir)
192
181
  @logger.info "Found input directory #{input_dir}"
193
182
  return input_dir
@@ -197,7 +186,8 @@ module VagrantMutate
197
186
  end
198
187
 
199
188
  def find_input_dir(name)
200
- box_parent_dir = File.join( @env.boxes_path, name)
189
+ # TODO support versioned boxes
190
+ box_parent_dir = File.join( @env.boxes_path, name, '0')
201
191
 
202
192
  if Dir.exist?(box_parent_dir)
203
193
  providers = Dir.entries(box_parent_dir).reject { |entry| entry =~ /^\./ }
@@ -46,7 +46,7 @@ module VagrantMutate
46
46
  '/usr/bin/qemu-kvm',
47
47
  '/usr/libexec/qemu-kvm',
48
48
  '/usr/bin/kvm' ]
49
- qemu_bin = qemu_bin_list.detect { |binary| File.exists? binary }
49
+ qemu_bin = qemu_bin_list.detect { |binary| File.exist? binary }
50
50
  unless qemu_bin
51
51
  raise Errors::QemuNotFound
52
52
  end
@@ -6,6 +6,10 @@ module VagrantMutate
6
6
  error_namespace('vagrant_mutate.errors')
7
7
  end
8
8
 
9
+ class CloudNotSupported < VagrantMutateError
10
+ error_key(:cloud_not_supported)
11
+ end
12
+
9
13
  class ProvidersMatch < VagrantMutateError
10
14
  error_key(:providers_match)
11
15
  end
@@ -7,9 +7,17 @@ module VagrantMutate
7
7
  class Mutate < Vagrant.plugin(2, :command)
8
8
 
9
9
  def execute
10
+ options = {}
11
+ options[:input_provider] = nil
12
+
10
13
  opts = OptionParser.new do |o|
11
14
  o.banner = 'Usage: vagrant mutate <box-name-or-file> <provider>'
15
+ o.on("--input_provider PROVIDER",
16
+ "Specify provider for input box") do |p|
17
+ options[:input_provider] = p
18
+ end
12
19
  end
20
+
13
21
  argv = parse_options(opts)
14
22
  return if !argv
15
23
 
@@ -18,17 +26,17 @@ module VagrantMutate
18
26
  return
19
27
  end
20
28
 
21
- box_arg = argv[0]
22
- output_provider_arg = argv[1]
29
+ options[:box_arg] = argv[0]
30
+ options[:output_provider] = argv[1]
23
31
 
24
32
  Qemu.verify_qemu_installed
25
33
  Qemu.verify_qemu_version(@env)
26
34
 
27
35
  input_loader = BoxLoader.new(@env)
28
- input_box = input_loader.load(box_arg)
36
+ input_box = input_loader.load( options[:box_arg], options[:input_provider] )
29
37
 
30
38
  output_loader = BoxLoader.new(@env)
31
- output_box = output_loader.prepare_for_output( input_box.name, output_provider_arg)
39
+ output_box = output_loader.prepare_for_output( input_box.name, options[:output_provider])
32
40
 
33
41
  converter = Converter::Converter.create(@env, input_box, output_box)
34
42
  converter.convert
@@ -1,3 +1,3 @@
1
1
  module VagrantMutate
2
- VERSION = '0.2.6'
2
+ VERSION = '0.3.0'
3
3
  end
data/locales/en.yml CHANGED
@@ -1,6 +1,8 @@
1
1
  en:
2
2
  vagrant_mutate:
3
3
  errors:
4
+ cloud_not_supported: |-
5
+ Vagrant-mutate can not download from Vagrant Cloud for you.
4
6
  providers_match: |-
5
7
  Input and output provider are the same. Aborting.
6
8
  provider_not_supported: |-
data/test/test.rb CHANGED
@@ -4,7 +4,7 @@ require 'fileutils'
4
4
 
5
5
  def cleanup
6
6
  puts "\nCLEANING UP"
7
- base_output_dir = File.expand_path('../actual_output', __FILE__)
7
+ base_output_dir = File.expand_path('../actual_output', __FILE__)
8
8
  if File.directory? base_output_dir
9
9
  FileUtils.rm_rf base_output_dir
10
10
  end
@@ -12,8 +12,8 @@ end
12
12
 
13
13
  def build_plugin
14
14
  puts "\nBUILDING PLUGIN"
15
- pkg_dir = File.expand_path('../../pkg', __FILE__)
16
- working_dir = Dir.pwd
15
+ pkg_dir = File.expand_path('../../pkg', __FILE__)
16
+ working_dir = Dir.pwd
17
17
  Dir.chdir pkg_dir
18
18
  FileUtils.rm( Dir.glob('*.gem') )
19
19
  system('rake build')
@@ -22,8 +22,8 @@ end
22
22
 
23
23
  def install_plugin
24
24
  puts "\nINSTALLING PLUGIN"
25
- pkg_dir = File.expand_path('../../pkg', __FILE__)
26
- working_dir = Dir.pwd
25
+ pkg_dir = File.expand_path('../../pkg', __FILE__)
26
+ working_dir = Dir.pwd
27
27
  Dir.chdir pkg_dir
28
28
  system('vagrant plugin install *.gem')
29
29
  Dir.chdir working_dir
@@ -39,8 +39,8 @@ def derandomize_output(input, output_dir)
39
39
  contents = File.read(path)
40
40
  contents.gsub!(/52:54:00:[0-9a-f:]+/, '52:54:00:cb:b2:80')
41
41
  contents.gsub!(/525400[0-9a-f]+/, '525400cbb280')
42
- File.open(path, 'w') do |f|
43
- f.write(contents)
42
+ File.open(path, 'w') do |o|
43
+ o.write(contents)
44
44
  end
45
45
  end
46
46
  end
@@ -49,11 +49,11 @@ end
49
49
 
50
50
  def test(input, outputs)
51
51
  failures = []
52
- test_dir = File.expand_path( File.dirname(__FILE__) )
52
+ test_dir = File.expand_path( File.dirname(__FILE__) )
53
53
 
54
- input_box = File.join(test_dir, 'input', input, 'mutate-test.box')
54
+ input_box = File.join(test_dir, 'input', input, 'mutate-test.box')
55
55
 
56
- vagrant_dir = File.join(test_dir, 'actual_output', input)
56
+ vagrant_dir = File.join(test_dir, 'actual_output', input)
57
57
  FileUtils.mkdir_p vagrant_dir
58
58
  ENV['VAGRANT_HOME'] = vagrant_dir
59
59
  install_plugin
@@ -61,7 +61,8 @@ def test(input, outputs)
61
61
  outputs.each do |output|
62
62
  puts "\nTESTING #{input} to #{output}"
63
63
  system("vagrant mutate #{input_box} #{output}")
64
- output_dir = File.join(vagrant_dir, 'boxes', 'mutate-test', output)
64
+ # 0 because input boxes are unversioned
65
+ output_dir = File.join(vagrant_dir, 'boxes', 'mutate-test', '0', output)
65
66
  expected_output_dir = File.join(test_dir, 'expected_output', input, output)
66
67
  derandomize_output(input, output_dir)
67
68
  Dir.foreach(expected_output_dir) do |f|
@@ -84,9 +85,9 @@ failures = test( 'virtualbox', ['kvm', 'libvirt'] )
84
85
  failures += test( 'libvirt', ['kvm'] )
85
86
  failures += test( 'kvm', ['libvirt'] )
86
87
 
87
- unless failures.empty?
88
+ if failures.empty?
89
+ puts "\nALL TESTS PASSED"
90
+ else
88
91
  puts "\nTESTS FAILED"
89
92
  failures.each {|f| puts f}
90
- else
91
- puts "\nALL TESTS PASSED"
92
93
  end
metadata CHANGED
@@ -1,41 +1,46 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-mutate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.3.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Brian Pitts
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-05-04 00:00:00.000000000 Z
12
+ date: 2014-05-18 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bundler
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - "~>"
19
+ - - ~>
18
20
  - !ruby/object:Gem::Version
19
21
  version: '1.3'
20
22
  type: :development
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - "~>"
27
+ - - ~>
25
28
  - !ruby/object:Gem::Version
26
29
  version: '1.3'
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: rake
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - ">="
35
+ - - ! '>='
32
36
  - !ruby/object:Gem::Version
33
37
  version: '0'
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - ">="
43
+ - - ! '>='
39
44
  - !ruby/object:Gem::Version
40
45
  version: '0'
41
46
  description: Convert vagrant boxes to work with different providers
@@ -45,7 +50,7 @@ executables: []
45
50
  extensions: []
46
51
  extra_rdoc_files: []
47
52
  files:
48
- - ".gitignore"
53
+ - .gitignore
49
54
  - CHANGELOG.md
50
55
  - Gemfile
51
56
  - LICENSE.txt
@@ -88,26 +93,27 @@ files:
88
93
  homepage: ''
89
94
  licenses:
90
95
  - MIT
91
- metadata: {}
92
96
  post_install_message:
93
97
  rdoc_options: []
94
98
  require_paths:
95
99
  - lib
96
100
  required_ruby_version: !ruby/object:Gem::Requirement
101
+ none: false
97
102
  requirements:
98
- - - ">="
103
+ - - ! '>='
99
104
  - !ruby/object:Gem::Version
100
105
  version: '0'
101
106
  required_rubygems_version: !ruby/object:Gem::Requirement
107
+ none: false
102
108
  requirements:
103
- - - ">="
109
+ - - ! '>='
104
110
  - !ruby/object:Gem::Version
105
111
  version: '0'
106
112
  requirements: []
107
113
  rubyforge_project:
108
- rubygems_version: 2.2.0
114
+ rubygems_version: 1.8.23
109
115
  signing_key:
110
- specification_version: 4
116
+ specification_version: 3
111
117
  summary: Convert vagrant boxes to work with different providers
112
118
  test_files:
113
119
  - test/expected_output/kvm/libvirt/Vagrantfile
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 4782f5d4cba1aea0370134ebe65d9bfe5466b158
4
- data.tar.gz: 973ab07ff59bd8e8c8159156fe4473ac7de07f66
5
- SHA512:
6
- metadata.gz: 6e741a3605d4c9d855554169a187fbdc6d0578c585809c8b77cf37c1093839411a1c9bb3fad6278b17472fd9affdb4c24edff2da45d199d92386b18982e4bff2
7
- data.tar.gz: f2dfe11947e128475622c9b1cff97b1c2fe49ce313d77f39b410dfe2ba8f93e73c14ce025c07565c47e4715fde9a2aab08a2ff15fa1b3cfb846c1fee208296be