vagrant-parallels 0.0.6 → 0.0.7

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.
@@ -35,7 +35,7 @@ module VagrantPlugins
35
35
  machine.provider.driver.read_network_interfaces.each do |adapter, opts|
36
36
  if opts[:type] == :hostonly
37
37
  machine.provider.driver.read_host_only_interfaces.each do |interface|
38
- if interface[:name] == opts[:hostonly]
38
+ if interface[:bound_to] == opts[:hostonly]
39
39
  return interface[:ip]
40
40
  end
41
41
  end
@@ -50,13 +50,18 @@ module VagrantPlugins
50
50
  #
51
51
  # @return [String]
52
52
  def read_machine_ip(machine)
53
+ ips = []
53
54
  machine.config.vm.networks.each do |type, options|
54
55
  if type == :private_network && options[:ip].is_a?(String)
55
- return options[:ip]
56
+ ips << options[:ip]
56
57
  end
57
58
  end
58
59
 
59
- nil
60
+ if ips.empty?
61
+ return nil
62
+ end
63
+
64
+ ips
60
65
  end
61
66
  end
62
67
  end
@@ -20,7 +20,7 @@ module VagrantPlugins
20
20
  # b.use HandleForwardedPortCollisions
21
21
  b.use PruneNFSExports
22
22
  b.use NFS
23
- #b.use PrepareNFSSettings
23
+ b.use PrepareNFSSettings
24
24
  b.use ClearSharedFolders
25
25
  b.use ShareFolders
26
26
  b.use Network
@@ -268,7 +268,6 @@ module VagrantPlugins
268
268
  end
269
269
  end
270
270
 
271
- #autoload :PrepareNFSSettings, File.expand_path("../action/prepare_nfs_settings", __FILE__)
272
271
  autoload :Boot, File.expand_path("../action/boot", __FILE__)
273
272
  autoload :CheckAccessible, File.expand_path("../action/check_accessible", __FILE__)
274
273
  autoload :CheckCreated, File.expand_path("../action/check_created", __FILE__)
@@ -295,6 +294,7 @@ module VagrantPlugins
295
294
  autoload :Network, File.expand_path("../action/network", __FILE__)
296
295
  autoload :Package, File.expand_path("../action/package", __FILE__)
297
296
  autoload :PackageConfigFiles, File.expand_path("../action/package_config_files", __FILE__)
297
+ autoload :PrepareNFSSettings, File.expand_path("../action/prepare_nfs_settings", __FILE__)
298
298
  autoload :PruneNFSExports, File.expand_path("../action/prune_nfs_exports", __FILE__)
299
299
  autoload :RegisterTemplate, File.expand_path("../action/register_template", __FILE__)
300
300
  autoload :Resume, File.expand_path("../action/resume", __FILE__)
@@ -38,6 +38,19 @@ module VagrantPlugins
38
38
  @logger.info("CLI prlsrvctl path: #{@prlsrvctl_path}")
39
39
  end
40
40
 
41
+ def compact(uuid=nil)
42
+ uuid ||= @uuid
43
+ path_to_hdd = read_settings(uuid).fetch("Hardware", {}).fetch("hdd0", {}).fetch("image", nil)
44
+ raw('prl_disk_tool', 'compact', '--hdd', path_to_hdd) do |type, data|
45
+ lines = data.split("\r")
46
+ # The progress of the import will be in the last line. Do a greedy
47
+ # regular expression to find what we're looking for.
48
+ if lines.last =~ /.+?(\d{,3}) ?%/
49
+ yield $1.to_i if block_given?
50
+ end
51
+ end
52
+ end
53
+
41
54
  def create_host_only_network(options)
42
55
  # Create the interface
43
56
  execute(:prlsrvctl, "net", "add", options[:name], "--type", "host-only")
@@ -66,6 +79,24 @@ module VagrantPlugins
66
79
  }
67
80
  end
68
81
 
82
+ def clear_shared_folders
83
+ read_settings.fetch("Host Shared Folders", {}).keys.drop(1).each do |folder|
84
+ execute("set", @uuid, "--shf-host-del", folder)
85
+ end
86
+ end
87
+
88
+ def delete
89
+ execute('delete', @uuid)
90
+ end
91
+
92
+ def delete_adapters
93
+ read_settings.fetch('Hardware', {}).each do |adapter, params|
94
+ if adapter.start_with?('net') and !params.fetch("enabled", true)
95
+ execute('set', @uuid, '--device-del', adapter)
96
+ end
97
+ end
98
+ end
99
+
69
100
  def delete_unused_host_only_networks
70
101
  networks = read_virtual_networks()
71
102
 
@@ -141,11 +172,45 @@ module VagrantPlugins
141
172
  end
142
173
  end
143
174
 
144
- # Returns the current state of this VM.
145
- #
146
- # @return [Symbol]
147
- def read_state
148
- read_settings(@uuid).fetch('State', 'inaccessible').to_sym
175
+ def export(path, vm_name)
176
+ execute("clone", @uuid, "--name", vm_name, "--template", "--dst", path.to_s) do |type, data|
177
+ lines = data.split("\r")
178
+ # The progress of the import will be in the last line. Do a greedy
179
+ # regular expression to find what we're looking for.
180
+ if lines.last =~ /.+?(\d{,3}) ?%/
181
+ yield $1.to_i if block_given?
182
+ end
183
+ end
184
+
185
+ read_settings(vm_name).fetch('ID', vm_name)
186
+ end
187
+
188
+ def halt(force=false)
189
+ args = ['stop', @uuid]
190
+ args << '--kill' if force
191
+ execute(*args)
192
+ end
193
+
194
+ def import(template_uuid, vm_name)
195
+ execute("clone", template_uuid, '--name', vm_name) do |type, data|
196
+ lines = data.split("\r")
197
+ # The progress of the import will be in the last line. Do a greedy
198
+ # regular expression to find what we're looking for.
199
+ if lines.last =~ /.+?(\d{,3}) ?%/
200
+ yield $1.to_i if block_given?
201
+ end
202
+ end
203
+ @uuid = read_settings(vm_name).fetch('ID', vm_name)
204
+ end
205
+
206
+ def ip
207
+ mac_addr = read_mac_address.downcase
208
+ File.foreach("/Library/Preferences/Parallels/parallels_dhcp_leases") do |line|
209
+ if line.include? mac_addr
210
+ ip = line[/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/]
211
+ return ip
212
+ end
213
+ end
149
214
  end
150
215
 
151
216
  # Returns a hash of all UUIDs assigned to VMs and templates currently
@@ -212,6 +277,10 @@ module VagrantPlugins
212
277
  bridged_ifaces
213
278
  end
214
279
 
280
+ def read_guest_tools_version
281
+ read_settings.fetch('GuestTools', {}).fetch('version', nil)
282
+ end
283
+
215
284
  def read_host_only_interfaces
216
285
  net_list = read_virtual_networks()
217
286
  net_list.keep_if { |net| net['Type'] == "host-only" }
@@ -247,121 +316,71 @@ module VagrantPlugins
247
316
  read_settings.fetch('Hardware', {}).fetch('net0', {}).fetch('mac', nil)
248
317
  end
249
318
 
250
- def read_virtual_networks
251
- json { execute(:prlsrvctl, 'net', 'list', '--json', retryable: true) }
252
- end
253
-
254
- # Verifies that the driver is ready to accept work.
255
- #
256
- # This should raise a VagrantError if things are not ready.
257
- def verify!
258
- # TODO: Use version method?
259
- execute('--version')
260
- end
319
+ def read_network_interfaces
320
+ nics = {}
261
321
 
262
- def version
263
- raw_version = execute('--version', retryable: true)
264
- raw_version.gsub('/prlctl version /', '')
265
- end
266
-
267
- def clear_shared_folders
268
- read_settings.fetch("Host Shared Folders", {}).keys.drop(1).each do |folder|
269
- execute("set", @uuid, "--shf-host-del", folder)
322
+ # Get enabled VM's network interfaces
323
+ ifaces = read_settings.fetch('Hardware', {}).keep_if do |dev, params|
324
+ dev.start_with?('net') and params.fetch("enabled", true)
270
325
  end
271
- end
272
-
273
- def import(template_uuid, vm_name)
274
- execute("clone", template_uuid, '--name', vm_name) do |type, data|
275
- lines = data.split("\r")
276
- # The progress of the import will be in the last line. Do a greedy
277
- # regular expression to find what we're looking for.
278
- if lines.last =~ /.+?(\d{,3}) ?%/
279
- yield $1.to_i if block_given?
280
- end
281
- end
282
- @uuid = read_settings(vm_name).fetch('ID', vm_name)
283
- end
284
-
285
- def delete_adapters
286
- read_settings.fetch('Hardware', {}).each do |adapter, params|
287
- if adapter.start_with?('net') and !params.fetch("enabled", true)
288
- execute('set', @uuid, '--device-del', adapter)
326
+ ifaces.each do |name, params|
327
+ adapter = name.match(/^net(\d+)$/)[1].to_i
328
+ nics[adapter] ||= {}
329
+
330
+ if params['type'] == "shared"
331
+ nics[adapter][:type] = :shared
332
+ elsif params['type'] == "host"
333
+ # It is PD internal host-only network and it is bounded to 'vnic1'
334
+ nics[adapter][:type] = :hostonly
335
+ nics[adapter][:hostonly] = "vnic1"
336
+ elsif params['type'] == "bridged" and params.fetch('iface','').start_with?('vnic')
337
+ # Bridged to the 'vnicXX'? Then it is a host-only, actually.
338
+ nics[adapter][:type] = :hostonly
339
+ nics[adapter][:hostonly] = params.fetch('iface','')
340
+ elsif params['type'] == "bridged"
341
+ nics[adapter][:type] = :bridged
342
+ nics[adapter][:bridge] = params.fetch('iface','')
289
343
  end
290
344
  end
345
+ nics
291
346
  end
292
347
 
293
- def resume
294
- execute('resume', @uuid)
295
- end
296
-
297
- def suspend
298
- execute('suspend', @uuid)
299
- end
300
-
301
- def start
302
- execute('start', @uuid)
303
- end
304
-
305
- def halt(force=false)
306
- args = ['stop', @uuid]
307
- args << '--kill' if force
308
- execute(*args)
309
- end
310
-
311
- def delete
312
- execute('delete', @uuid)
348
+ # Returns the current state of this VM.
349
+ #
350
+ # @return [Symbol]
351
+ def read_state
352
+ read_settings(@uuid).fetch('State', 'inaccessible').to_sym
313
353
  end
314
354
 
315
- def export(path, vm_name)
316
- execute("clone", @uuid, "--name", vm_name, "--template", "--dst", path.to_s) do |type, data|
317
- lines = data.split("\r")
318
- # The progress of the import will be in the last line. Do a greedy
319
- # regular expression to find what we're looking for.
320
- if lines.last =~ /.+?(\d{,3}) ?%/
321
- yield $1.to_i if block_given?
322
- end
323
- end
324
-
325
- read_settings(vm_name).fetch('ID', vm_name)
355
+ def read_virtual_networks
356
+ json { execute(:prlsrvctl, 'net', 'list', '--json', retryable: true) }
326
357
  end
327
358
 
328
- def compact(uuid=nil)
329
- uuid ||= @uuid
330
- path_to_hdd = read_settings(uuid).fetch("Hardware", {}).fetch("hdd0", {}).fetch("image", nil)
331
- raw('prl_disk_tool', 'compact', '--hdd', path_to_hdd) do |type, data|
332
- lines = data.split("\r")
333
- # The progress of the import will be in the last line. Do a greedy
334
- # regular expression to find what we're looking for.
335
- if lines.last =~ /.+?(\d{,3}) ?%/
336
- yield $1.to_i if block_given?
337
- end
338
- end
359
+ def ready?
360
+ !!guest_execute('uname') rescue false
339
361
  end
340
362
 
341
363
  def register(pvm_file)
342
364
  execute("register", pvm_file)
343
365
  end
344
366
 
345
- def unregister(uuid)
346
- execute("unregister", uuid)
347
- end
348
-
349
367
  def registered?(path)
350
368
  # TODO: Make this take UUID and have callers pass that instead
351
369
  # Need a way to get the UUID from unregistered templates though (config.pvs XML parsing/regex?)
352
370
  read_all_paths.has_key?(path)
353
371
  end
354
372
 
355
- def set_mac_address(mac)
356
- execute('set', @uuid, '--device-set', 'net0', '--type', 'shared', '--mac', mac)
373
+ def resume
374
+ execute('resume', @uuid)
357
375
  end
358
376
 
359
- def ssh_port(expected_port)
360
- 22
377
+ def set_mac_address(mac)
378
+ execute('set', @uuid, '--device-set', 'net0', '--type', 'shared', '--mac', mac)
361
379
  end
362
380
 
363
- def read_guest_tools_version
364
- read_settings.fetch('GuestTools', {}).fetch('version', nil)
381
+ # apply custom vm setting via set parameter
382
+ def set_vm_settings(command)
383
+ raw(@manager_path, *command)
365
384
  end
366
385
 
367
386
  def share_folders(folders)
@@ -371,27 +390,46 @@ module VagrantPlugins
371
390
  end
372
391
  end
373
392
 
374
- def ready?
375
- !!guest_execute('uname') rescue false
393
+ def ssh_port(expected_port)
394
+ 22
376
395
  end
377
396
 
378
- def ip
379
- mac_addr = read_mac_address.downcase
380
- File.foreach("/Library/Preferences/Parallels/parallels_dhcp_leases") do |line|
381
- if line.include? mac_addr
382
- ip = line[/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/]
383
- return ip
384
- end
385
- end
397
+ def start
398
+ execute('start', @uuid)
386
399
  end
387
400
 
388
- # apply custom vm setting via set parameter
389
- def set_vm_settings(command)
390
- raw(@manager_path, *command)
401
+ def suspend
402
+ execute('suspend', @uuid)
403
+ end
404
+
405
+ def unregister(uuid)
406
+ execute("unregister", uuid)
407
+ end
408
+
409
+ # Verifies that the driver is ready to accept work.
410
+ #
411
+ # This should raise a VagrantError if things are not ready.
412
+ def verify!
413
+ # TODO: Use version method?
414
+ execute('--version')
415
+ end
416
+
417
+ def version
418
+ raw_version = execute('--version', retryable: true)
419
+ raw_version.gsub('/prlctl version /', '')
391
420
  end
392
421
 
393
422
  private
394
423
 
424
+ def guest_execute(*command)
425
+ execute('exec', @uuid, *command)
426
+ end
427
+
428
+ def json(default=nil)
429
+ data = yield
430
+ JSON.parse(data) rescue default
431
+ end
432
+
395
433
  # Parse the JSON from *all* VMs and templates. Then return an array of objects (without duplicates)
396
434
  def read_all_info
397
435
  vms_arr = json({}) do
@@ -408,15 +446,6 @@ module VagrantPlugins
408
446
  json({}) { execute('list', uuid, '--info', '--json', retryable: true).gsub(/^(INFO)?\[/, '').gsub(/\]$/, '') }
409
447
  end
410
448
 
411
- def json(default=nil)
412
- data = yield
413
- JSON.parse(data) rescue default
414
- end
415
-
416
- def guest_execute(*command)
417
- execute('exec', @uuid, *command)
418
- end
419
-
420
449
  def error_detection(command_response)
421
450
  errored = false
422
451
  # If the command was a failure, then raise an exception that is
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module Parallels
3
- VERSION = "0.0.6"
3
+ VERSION = "0.0.7"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-parallels
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
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: 2013-11-17 00:00:00.000000000 Z
12
+ date: 2013-11-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -147,15 +147,6 @@ files:
147
147
  - locales/en.yml
148
148
  - Rakefile
149
149
  - README.md
150
- - sandi_meter/assets/chart.js
151
- - sandi_meter/assets/forkme.png
152
- - sandi_meter/assets/jquery.js
153
- - sandi_meter/assets/morris.css
154
- - sandi_meter/assets/normalize.css
155
- - sandi_meter/assets/script.js
156
- - sandi_meter/assets/style.css
157
- - sandi_meter/index.html
158
- - sandi_meter/sandi_meter.log
159
150
  - spec/vagrant-parallels/setup_spec.rb
160
151
  - vagrant-parallels.gemspec
161
152
  - .gitignore
@@ -173,6 +164,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
173
164
  - - ! '>='
174
165
  - !ruby/object:Gem::Version
175
166
  version: '0'
167
+ segments:
168
+ - 0
169
+ hash: 3847391390300994580
176
170
  required_rubygems_version: !ruby/object:Gem::Requirement
177
171
  none: false
178
172
  requirements: