vagrant-parallels 0.2.1 → 0.2.2.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +21 -13
  3. data/.travis.yml +1 -0
  4. data/README.md +43 -54
  5. data/config/i18n-tasks.yml.erb +1 -1
  6. data/debug.log +941 -0
  7. data/lib/vagrant-parallels/action.rb +0 -7
  8. data/lib/vagrant-parallels/action/check_accessible.rb +1 -1
  9. data/lib/vagrant-parallels/action/check_guest_tools.rb +10 -2
  10. data/lib/vagrant-parallels/action/clear_network_interfaces.rb +1 -1
  11. data/lib/vagrant-parallels/action/customize.rb +6 -4
  12. data/lib/vagrant-parallels/action/export.rb +56 -12
  13. data/lib/vagrant-parallels/action/import.rb +49 -30
  14. data/lib/vagrant-parallels/action/network.rb +137 -48
  15. data/lib/vagrant-parallels/action/package_config_files.rb +0 -12
  16. data/lib/vagrant-parallels/action/prepare_nfs_valid_ids.rb +1 -1
  17. data/lib/vagrant-parallels/action/set_name.rb +2 -2
  18. data/lib/vagrant-parallels/config.rb +11 -2
  19. data/lib/vagrant-parallels/driver/base.rb +281 -0
  20. data/lib/vagrant-parallels/driver/meta.rb +138 -0
  21. data/lib/vagrant-parallels/driver/{prl_ctl.rb → pd_8.rb} +116 -256
  22. data/lib/vagrant-parallels/driver/pd_9.rb +417 -0
  23. data/lib/vagrant-parallels/errors.rb +15 -7
  24. data/lib/vagrant-parallels/plugin.rb +7 -7
  25. data/lib/vagrant-parallels/provider.rb +33 -3
  26. data/lib/vagrant-parallels/version.rb +1 -1
  27. data/locales/en.yml +30 -16
  28. data/test/unit/base.rb +1 -5
  29. data/test/unit/config_test.rb +13 -2
  30. data/test/unit/driver/pd_8_test.rb +196 -0
  31. data/test/unit/driver/pd_9_test.rb +196 -0
  32. data/test/unit/locales/locales_test.rb +1 -1
  33. data/test/unit/support/shared/parallels_context.rb +2 -2
  34. data/test/unit/support/shared/pd_driver_examples.rb +243 -0
  35. data/test/unit/synced_folder_test.rb +37 -0
  36. data/vagrant-parallels.gemspec +5 -5
  37. metadata +39 -32
  38. data/lib/vagrant-parallels/action/match_mac_address.rb +0 -28
  39. data/lib/vagrant-parallels/action/register_template.rb +0 -24
  40. data/lib/vagrant-parallels/action/unregister_template.rb +0 -26
  41. data/test/support/isolated_environment.rb +0 -46
  42. data/test/support/tempdir.rb +0 -43
  43. data/test/unit/driver/prl_ctl_test.rb +0 -148
@@ -9,6 +9,6 @@ describe 'locales' do
9
9
  end
10
10
 
11
11
  it 'are all present' do
12
- i18n.untranslated_keys.should have(0).keys
12
+ i18n.missing_keys.should have(0).keys
13
13
  end
14
14
  end
@@ -1,6 +1,6 @@
1
1
  shared_context "parallels" do
2
2
  let(:parallels_context) { true }
3
- let(:uuid) { "9876-dcba-8765-hgfe" }
3
+ let(:uuid) { "1234-here-is-uuid-5678" }
4
4
  let(:parallels_version) { "9" }
5
5
  let(:subprocess) { double("Vagrant::Util::Subprocess") }
6
6
 
@@ -24,7 +24,7 @@ shared_context "parallels" do
24
24
 
25
25
  # drivers also call vm_exists? during init;
26
26
  subprocess.stub(:execute).
27
- with("prlctl", "list", kind_of(String), "--info", "--json", kind_of(Hash)).
27
+ with("prlctl", "list", uuid, kind_of(Hash)).
28
28
  and_return(subprocess_result(exit_code: 0))
29
29
  end
30
30
  end
@@ -0,0 +1,243 @@
1
+ shared_examples "parallels desktop driver" do |options|
2
+ before do
3
+ raise ArgumentError, "Need parallels context to use these shared examples." unless defined? parallels_context
4
+ end
5
+
6
+ # Accessor to the delegate object
7
+ let(:driver) { subject.instance_variable_get("@driver") }
8
+
9
+ describe "compact" do
10
+ settings = {"Hardware" => {"hdd0" => {"image" => "/path/to/disk0.hdd"},
11
+ "hdd1" => {"image" => "/path/to/disk1.hdd"}}}
12
+ it "compacts the VM disk drives" do
13
+ driver.should_receive(:read_settings).and_return(settings)
14
+
15
+ subprocess.should_receive(:execute).exactly(2).times.
16
+ with("prl_disk_tool", 'compact', '--hdd', /^\/path\/to\/disk(0|1).hdd$/,
17
+ an_instance_of(Hash)).
18
+ and_return(subprocess_result(exit_code: 0))
19
+ subject.compact(uuid)
20
+ end
21
+ end
22
+
23
+ describe "clear_shared_folders" do
24
+ it "deletes every shared folder assigned to the VM" do
25
+ subprocess.should_receive(:execute).at_least(2).times.
26
+ with("prlctl", "set", uuid, "--shf-host-del", an_instance_of(String),
27
+ an_instance_of(Hash)).
28
+ and_return(subprocess_result(exit_code: 0))
29
+ subject.clear_shared_folders
30
+ end
31
+ end
32
+
33
+ describe "create_host_only_network" do
34
+ let(:hostonly_iface) {'vnic12'}
35
+ it "creates host-only NIC with dhcp server configured" do
36
+ vnic_opts = {
37
+ :name => 'vagrant_vnic8',
38
+ :adapter_ip => '11.11.11.11',
39
+ :netmask => '255.255.252.0',
40
+ :dhcp => {
41
+ :ip => '11.11.11.11',
42
+ :lower => '11.11.8.1',
43
+ :upper => '11.11.11.254'
44
+ }
45
+ }
46
+
47
+ subprocess.should_receive(:execute).
48
+ with("prlsrvctl", "net", "add", vnic_opts[:name],
49
+ "--type", "host-only", an_instance_of(Hash)).
50
+ and_return(subprocess_result(exit_code: 0))
51
+
52
+ subprocess.should_receive(:execute).
53
+ with("prlsrvctl", "net", "set", vnic_opts[:name],
54
+ "--ip", "#{vnic_opts[:adapter_ip]}/#{vnic_opts[:netmask]}",
55
+ "--dhcp-ip", vnic_opts[:dhcp][:ip],
56
+ "--ip-scope-start", vnic_opts[:dhcp][:lower],
57
+ "--ip-scope-end", vnic_opts[:dhcp][:upper], an_instance_of(Hash)).
58
+ and_return(subprocess_result(exit_code: 0))
59
+
60
+ interface = subject.create_host_only_network(vnic_opts)
61
+
62
+ interface.should include(:name => vnic_opts[:name])
63
+ interface.should include(:ip => vnic_opts[:adapter_ip])
64
+ interface.should include(:netmask => vnic_opts[:netmask])
65
+ interface.should include(:dhcp => vnic_opts[:dhcp])
66
+ interface.should include(:bound_to => hostonly_iface)
67
+ interface[:bound_to].should =~ /^(vnic(\d+))$/
68
+ end
69
+
70
+ it "creates host-only NIC without dhcp" do
71
+ vnic_options = {
72
+ :name => 'vagrant_vnic3',
73
+ :adapter_ip => '22.22.22.22',
74
+ :netmask => '255.255.254.0',
75
+ }
76
+
77
+ subprocess.should_receive(:execute).
78
+ with("prlsrvctl", "net", "add", vnic_options[:name],
79
+ "--type", "host-only", an_instance_of(Hash)).
80
+ and_return(subprocess_result(exit_code: 0))
81
+
82
+ subprocess.should_receive(:execute).
83
+ with("prlsrvctl", "net", "set", vnic_options[:name],
84
+ "--ip", "#{vnic_options[:adapter_ip]}/#{vnic_options[:netmask]}",
85
+ an_instance_of(Hash)).
86
+ and_return(subprocess_result(exit_code: 0))
87
+
88
+ interface = subject.create_host_only_network(vnic_options)
89
+
90
+ interface.should include(:name => vnic_options[:name])
91
+ interface.should include(:ip => vnic_options[:adapter_ip])
92
+ interface.should include(:netmask => vnic_options[:netmask])
93
+ interface.should include(:dhcp => nil)
94
+ interface.should include(:bound_to => hostonly_iface)
95
+ interface[:bound_to].should =~ /^(vnic(\d+))$/
96
+ end
97
+ end
98
+
99
+ describe "delete" do
100
+ it "deletes the VM" do
101
+ subprocess.should_receive(:execute).
102
+ with("prlctl", "delete", uuid, an_instance_of(Hash)).
103
+ and_return(subprocess_result(exit_code: 0))
104
+ subject.delete
105
+ end
106
+ end
107
+
108
+ describe "delete_disabled_adapters" do
109
+ it "deletes disabled networks adapters from VM config" do
110
+ settings = {"Hardware" => {"net0" => {"enabled" => false},
111
+ "net1" => {"enabled" => false}}}
112
+ driver.should_receive(:read_settings).and_return(settings)
113
+ subprocess.should_receive(:execute).exactly(2).times.
114
+ with("prlctl", "set", uuid, "--device-del", /^net(0|1)$/,
115
+ an_instance_of(Hash)).
116
+ and_return(subprocess_result(exit_code: 0))
117
+ subject.delete_disabled_adapters
118
+ end
119
+ end
120
+
121
+ describe "export" do
122
+ tpl_name = "Some_Template_Name"
123
+ tpl_uuid = "1234-some-template-uuid-5678"
124
+
125
+ it "exports VM to template" do
126
+ subprocess.should_receive(:execute).
127
+ with("prlctl", "clone", uuid, "--name", an_instance_of(String),
128
+ "--template", "--dst", an_instance_of(String),
129
+ an_instance_of(Hash)).
130
+ and_return(subprocess_result(exit_code: 0))
131
+ subject.export("/path/to/template", tpl_name).should == tpl_uuid
132
+ end
133
+ end
134
+
135
+ describe "halt" do
136
+ it "stops the VM" do
137
+ subprocess.should_receive(:execute).
138
+ with("prlctl", "stop", uuid, an_instance_of(Hash)).
139
+ and_return(subprocess_result(exit_code: 0))
140
+ subject.halt
141
+ end
142
+
143
+ it "stops the VM force" do
144
+ subprocess.should_receive(:execute).
145
+ with("prlctl", "stop", uuid, "--kill", an_instance_of(Hash)).
146
+ and_return(subprocess_result(exit_code: 0))
147
+ subject.halt(force=true)
148
+ end
149
+ end
150
+
151
+ describe "read_settings" do
152
+ it "returns a hash with detailed info about the VM" do
153
+ subject.read_settings.should be_kind_of(Hash)
154
+ subject.read_settings.should include("ID" => uuid)
155
+ subject.read_settings.should include("Hardware")
156
+ subject.read_settings.should include("GuestTools")
157
+ end
158
+ end
159
+
160
+ describe "read_vms" do
161
+ it "returns the list of all registered VMs and templates" do
162
+ subject.read_vms.should be_kind_of(Hash)
163
+ subject.read_vms.should have_at_least(2).items
164
+ subject.read_vms.should include(vm_name => uuid)
165
+ end
166
+ end
167
+
168
+ describe "read_vms_info" do
169
+ it "returns detailed info about all registered VMs and templates" do
170
+ subject.read_vms_info.should be_kind_of(Array)
171
+ subject.read_vms_info.should have_at_least(2).items
172
+
173
+ # It should include info about current VM
174
+ vm_settings = driver.send(:read_settings)
175
+ subject.read_vms_info.should include(vm_settings)
176
+ end
177
+ end
178
+
179
+ describe "set_mac_address" do
180
+ it "sets base MAC address to the Shared network adapter" do
181
+ subprocess.should_receive(:execute).exactly(2).times.
182
+ with("prlctl", "set", uuid, '--device-set', 'net0', '--type', 'shared',
183
+ '--mac', an_instance_of(String), an_instance_of(Hash)).
184
+ and_return(subprocess_result(exit_code: 0))
185
+
186
+ subject.set_mac_address('001C42DD5902')
187
+ subject.set_mac_address('auto')
188
+ end
189
+ end
190
+
191
+ describe "set_name" do
192
+ it "sets new name for the VM" do
193
+ subprocess.should_receive(:execute).
194
+ with("prlctl", "set", uuid, '--name', an_instance_of(String),
195
+ an_instance_of(Hash)).
196
+ and_return(subprocess_result(exit_code: 0))
197
+
198
+ subject.set_name('new_vm_name')
199
+ end
200
+ end
201
+
202
+ describe "start" do
203
+ it "starts the VM" do
204
+ subprocess.should_receive(:execute).
205
+ with("prlctl", "start", uuid, an_instance_of(Hash)).
206
+ and_return(subprocess_result(exit_code: 0))
207
+ subject.start
208
+ end
209
+ end
210
+
211
+ describe "suspend" do
212
+ it "suspends the VM" do
213
+ subprocess.should_receive(:execute).
214
+ with("prlctl", "suspend", uuid, an_instance_of(Hash)).
215
+ and_return(subprocess_result(exit_code: 0))
216
+ subject.suspend
217
+ end
218
+ end
219
+
220
+ describe "unregister" do
221
+ it "suspends the VM" do
222
+ subprocess.should_receive(:execute).
223
+ with("prlctl", "unregister", an_instance_of(String),
224
+ an_instance_of(Hash)).
225
+ and_return(subprocess_result(exit_code: 0))
226
+ subject.unregister("template_or_vm_uuid")
227
+ end
228
+ end
229
+
230
+ describe "version" do
231
+ it "parses the version from output" do
232
+ subject.version.should match(/(#{parallels_version}[\d\.]+)/)
233
+ end
234
+
235
+ it "rises ParallelsInstallIncomplete exception when output is invalid" do
236
+ subprocess.should_receive(:execute).
237
+ with("prlctl", "--version", an_instance_of(Hash)).
238
+ and_return(subprocess_result(exit_code: 0))
239
+ expect { subject.version }.
240
+ to raise_error(VagrantPlugins::Parallels::Errors::ParallelsInvalidVersion)
241
+ end
242
+ end
243
+ end
@@ -0,0 +1,37 @@
1
+ require "vagrant"
2
+ require_relative "base"
3
+
4
+ require VagrantPlugins::Parallels.source_root.join('lib/vagrant-parallels/synced_folder')
5
+
6
+ describe VagrantPlugins::Parallels::SyncedFolder do
7
+ let(:machine) do
8
+ double("machine").tap do |m|
9
+ end
10
+ end
11
+
12
+ subject { described_class.new }
13
+
14
+ describe "usable" do
15
+ it "should be with parallels provider" do
16
+ machine.stub(provider_name: :parallels)
17
+ subject.should be_usable(machine)
18
+ end
19
+
20
+ it "should not be with another provider" do
21
+ machine.stub(provider_name: :virtualbox)
22
+ subject.should_not be_usable(machine)
23
+ end
24
+ end
25
+
26
+ describe "prepare" do
27
+ let(:driver) { double("driver") }
28
+
29
+ before do
30
+ machine.stub(driver: driver)
31
+ end
32
+
33
+ it "should share the folders" do
34
+ pending
35
+ end
36
+ end
37
+ end
@@ -6,10 +6,10 @@ Gem::Specification.new do |spec|
6
6
  spec.name = "vagrant-parallels"
7
7
  spec.version = VagrantPlugins::Parallels::VERSION
8
8
  spec.platform = Gem::Platform::RUBY
9
- spec.authors = ["Youssef Shahin"]
10
- spec.email = ["yshahin@gmail.com"]
11
- spec.description = %q{Enables Vagrant to manage Parallels machines.}
12
- spec.summary = %q{Enables Vagrant to manage Parallels machines.}
9
+ spec.authors = ["Mikhail Zholobov", "Youssef Shahin"]
10
+ spec.email = ["mzholobov@parallels.com", "yshahin@gmail.com"]
11
+ spec.summary = %q{Parallels provider for Vagrant.}
12
+ spec.description = %q{Enables Vagrant to manage Parallels virtual machines.}
13
13
  spec.homepage = "http://github.com/Parallels/vagrant-parallels"
14
14
  spec.license = "MIT"
15
15
 
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.add_development_dependency "bundler", "~> 1.5.2"
20
20
  spec.add_development_dependency "rake"
21
21
  spec.add_development_dependency "rspec", "~> 2.14.0"
22
- spec.add_development_dependency "i18n-tasks", "~> 0.2.14"
22
+ spec.add_development_dependency "i18n-tasks", "~> 0.2.21"
23
23
 
24
24
  # The following block of code determines the files that should be included
25
25
  # in the gem. It does this by reading all the files in the directory where
metadata CHANGED
@@ -1,87 +1,84 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-parallels
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2.rc1
5
5
  platform: ruby
6
6
  authors:
7
+ - Mikhail Zholobov
7
8
  - Youssef Shahin
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-02-02 00:00:00.000000000 Z
12
+ date: 2014-03-02 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
16
17
  requirements:
17
- - - "~>"
18
+ - - ~>
18
19
  - !ruby/object:Gem::Version
19
20
  version: 1.5.2
20
21
  type: :development
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
- - - "~>"
25
+ - - ~>
25
26
  - !ruby/object:Gem::Version
26
27
  version: 1.5.2
27
28
  - !ruby/object:Gem::Dependency
28
29
  name: rake
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
- - - ">="
32
+ - - '>='
32
33
  - !ruby/object:Gem::Version
33
34
  version: '0'
34
35
  type: :development
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
- - - ">="
39
+ - - '>='
39
40
  - !ruby/object:Gem::Version
40
41
  version: '0'
41
42
  - !ruby/object:Gem::Dependency
42
43
  name: rspec
43
44
  requirement: !ruby/object:Gem::Requirement
44
45
  requirements:
45
- - - "~>"
46
+ - - ~>
46
47
  - !ruby/object:Gem::Version
47
48
  version: 2.14.0
48
49
  type: :development
49
50
  prerelease: false
50
51
  version_requirements: !ruby/object:Gem::Requirement
51
52
  requirements:
52
- - - "~>"
53
+ - - ~>
53
54
  - !ruby/object:Gem::Version
54
55
  version: 2.14.0
55
56
  - !ruby/object:Gem::Dependency
56
57
  name: i18n-tasks
57
58
  requirement: !ruby/object:Gem::Requirement
58
59
  requirements:
59
- - - "~>"
60
+ - - ~>
60
61
  - !ruby/object:Gem::Version
61
- version: 0.2.14
62
+ version: 0.2.21
62
63
  type: :development
63
64
  prerelease: false
64
65
  version_requirements: !ruby/object:Gem::Requirement
65
66
  requirements:
66
- - - "~>"
67
+ - - ~>
67
68
  - !ruby/object:Gem::Version
68
- version: 0.2.14
69
- description: Enables Vagrant to manage Parallels machines.
69
+ version: 0.2.21
70
+ description: Enables Vagrant to manage Parallels virtual machines.
70
71
  email:
72
+ - mzholobov@parallels.com
71
73
  - yshahin@gmail.com
72
74
  executables: []
73
75
  extensions: []
74
76
  extra_rdoc_files: []
75
77
  files:
76
- - ".gitignore"
77
- - ".travis.yml"
78
- - Gemfile
79
- - LICENSE.txt
80
- - README.md
81
- - Rakefile
82
78
  - config/i18n-tasks.yml.erb
83
- - lib/vagrant-parallels.rb
84
- - lib/vagrant-parallels/action.rb
79
+ - debug.log
80
+ - Gemfile
81
+ - Gemfile.lock
85
82
  - lib/vagrant-parallels/action/boot.rb
86
83
  - lib/vagrant-parallels/action/check_accessible.rb
87
84
  - lib/vagrant-parallels/action/check_created.rb
@@ -99,7 +96,6 @@ files:
99
96
  - lib/vagrant-parallels/action/import.rb
100
97
  - lib/vagrant-parallels/action/is_running.rb
101
98
  - lib/vagrant-parallels/action/is_suspended.rb
102
- - lib/vagrant-parallels/action/match_mac_address.rb
103
99
  - lib/vagrant-parallels/action/message_already_running.rb
104
100
  - lib/vagrant-parallels/action/message_not_created.rb
105
101
  - lib/vagrant-parallels/action/message_not_running.rb
@@ -109,14 +105,16 @@ files:
109
105
  - lib/vagrant-parallels/action/package_config_files.rb
110
106
  - lib/vagrant-parallels/action/prepare_nfs_settings.rb
111
107
  - lib/vagrant-parallels/action/prepare_nfs_valid_ids.rb
112
- - lib/vagrant-parallels/action/register_template.rb
113
108
  - lib/vagrant-parallels/action/resume.rb
114
109
  - lib/vagrant-parallels/action/set_name.rb
115
110
  - lib/vagrant-parallels/action/setup_package_files.rb
116
111
  - lib/vagrant-parallels/action/suspend.rb
117
- - lib/vagrant-parallels/action/unregister_template.rb
112
+ - lib/vagrant-parallels/action.rb
118
113
  - lib/vagrant-parallels/config.rb
119
- - lib/vagrant-parallels/driver/prl_ctl.rb
114
+ - lib/vagrant-parallels/driver/base.rb
115
+ - lib/vagrant-parallels/driver/meta.rb
116
+ - lib/vagrant-parallels/driver/pd_8.rb
117
+ - lib/vagrant-parallels/driver/pd_9.rb
120
118
  - lib/vagrant-parallels/errors.rb
121
119
  - lib/vagrant-parallels/guest_cap/darwin/mount_parallels_shared_folder.rb
122
120
  - lib/vagrant-parallels/guest_cap/linux/mount_parallels_shared_folder.rb
@@ -124,17 +122,26 @@ files:
124
122
  - lib/vagrant-parallels/provider.rb
125
123
  - lib/vagrant-parallels/synced_folder.rb
126
124
  - lib/vagrant-parallels/version.rb
125
+ - lib/vagrant-parallels.rb
126
+ - LICENSE.txt
127
127
  - locales/en.yml
128
+ - Rakefile
129
+ - README.md
128
130
  - tasks/bundler.rake
129
131
  - tasks/test.rake
130
- - test/support/isolated_environment.rb
131
- - test/support/tempdir.rb
132
132
  - test/unit/base.rb
133
133
  - test/unit/config_test.rb
134
- - test/unit/driver/prl_ctl_test.rb
134
+ - test/unit/driver/pd_8_test.rb
135
+ - test/unit/driver/pd_9_test.rb
135
136
  - test/unit/locales/locales_test.rb
136
137
  - test/unit/support/shared/parallels_context.rb
138
+ - test/unit/support/shared/pd_driver_examples.rb
139
+ - test/unit/synced_folder_test.rb
137
140
  - vagrant-parallels.gemspec
141
+ - vagrant-spec.config.rb
142
+ - Vagrantfile
143
+ - .gitignore
144
+ - .travis.yml
138
145
  homepage: http://github.com/Parallels/vagrant-parallels
139
146
  licenses:
140
147
  - MIT
@@ -145,18 +152,18 @@ require_paths:
145
152
  - lib
146
153
  required_ruby_version: !ruby/object:Gem::Requirement
147
154
  requirements:
148
- - - ">="
155
+ - - '>='
149
156
  - !ruby/object:Gem::Version
150
157
  version: '0'
151
158
  required_rubygems_version: !ruby/object:Gem::Requirement
152
159
  requirements:
153
- - - ">="
160
+ - - '>='
154
161
  - !ruby/object:Gem::Version
155
162
  version: 1.3.6
156
163
  requirements: []
157
164
  rubyforge_project: vagrant-parallels
158
- rubygems_version: 2.2.0
165
+ rubygems_version: 2.0.14
159
166
  signing_key:
160
167
  specification_version: 4
161
- summary: Enables Vagrant to manage Parallels machines.
168
+ summary: Parallels provider for Vagrant.
162
169
  test_files: []