vagrant-parallels 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: