vagrant-parallels 1.3.3 → 1.3.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 554c27b74a3e4f369b9b56289b2ad941109fdb57
4
- data.tar.gz: 8cffa7aa2a2dff4b6d2234b65a6145f0b7df783b
3
+ metadata.gz: 3bb66fcb45443b929a94a608db1571c128d63391
4
+ data.tar.gz: ad196ab64285c216c5e7747cfd33b30475f56366
5
5
  SHA512:
6
- metadata.gz: e0fa26a9ac70f1e82b0ea317d74e803529ace61c99d9a2b92d815a81444a71c01d0b2fe6fa4e355a0da3781e0d878005fae9a0d62245a8c9b540dbf85d52b7a9
7
- data.tar.gz: 24365b17738e890b8cb6c8a990c1dc7a2711fc744d5d3ab4fd1afdb3c110575f91ef43953d2320b3a62138d6467bd7f7ddf6b51f53aefb0e89f68909f2b96770
6
+ metadata.gz: f5947a49b2946e6b389daed82507446b90e0b89d71a6008a010a232aa441bbd4eeb0a5dc1fc8eee65c658dab16aa12dd765cf5a465c4accf6e16d3e2a9787af8
7
+ data.tar.gz: 47f52fbd7b6014ba913e7a3d6865f49850348d6e5df7b072b12555b49bebcf10ea13870cd23b4adb65f5c15e2484acbb02f2d6eac63569e8877de784d065cd89
@@ -1,7 +1,13 @@
1
+ require 'ipaddr'
2
+ require "vagrant/action/builtin/mixin_synced_folders"
3
+
1
4
  module VagrantPlugins
2
5
  module Parallels
3
6
  module Action
4
7
  class PrepareNFSSettings
8
+ include Vagrant::Action::Builtin::MixinSyncedFolders
9
+ include Vagrant::Util::Retryable
10
+
5
11
  def initialize(app, env)
6
12
  @app = app
7
13
  @logger = Log4r::Logger.new('vagrant_parallels::action::nfs')
@@ -11,74 +17,35 @@ module VagrantPlugins
11
17
  @machine = env[:machine]
12
18
  @app.call(env)
13
19
 
14
- if using_nfs?(@machine.config.vm) || using_nfs?(env[:synced_folders_config])
20
+ opts = {
21
+ cached: !!env[:synced_folders_cached],
22
+ config: env[:synced_folders_config],
23
+ disable_usable_check: !!env[:test],
24
+ }
25
+ folders = synced_folders(env[:machine], **opts)
26
+
27
+ if folders.has_key?(:nfs)
15
28
  @logger.info("Using NFS, preparing NFS settings by reading host IP and machine IP")
16
29
  add_ips_to_env!(env)
17
30
  end
18
31
  end
19
32
 
20
- # We're using NFS if we have any synced folder with NFS configured. If
21
- # we are not using NFS we don't need to do the extra work to
22
- # populate these fields in the environment.
23
- def using_nfs?(env)
24
- env && env.synced_folders.any? { |_, opts| opts[:type] == :nfs }
25
- end
26
-
27
33
  # Extracts the proper host and guest IPs for NFS mounts and stores them
28
34
  # in the environment for the SyncedFolder action to use them in
29
35
  # mounting.
30
36
  #
31
37
  # The ! indicates that this method modifies its argument.
32
38
  def add_ips_to_env!(env)
33
- host_ip = find_host_only_adapter
34
- machine_ip = read_machine_ip
39
+ host_ip = @machine.provider.driver.read_shared_interface[:ip]
40
+ guest_ip = @machine.provider.driver.read_guest_ip
35
41
 
36
- raise Vagrant::Errors::NFSNoHostonlyNetwork if !host_ip || !machine_ip
42
+ # If we couldn't determine either guest's or host's IP, then
43
+ # it is probably a bug. Display an appropriate error message.
44
+ raise Vagrant::Errors::NFSNoHostIP if !host_ip
45
+ raise Vagrant::Errors::NFSNoGuestIP if !guest_ip
37
46
 
38
47
  env[:nfs_host_ip] = host_ip
39
- env[:nfs_machine_ip] = machine_ip
40
- end
41
-
42
- # Finds first host only network adapter and returns its IP address
43
- #
44
- # @return [String] ip address of found host-only adapter
45
- def find_host_only_adapter
46
- host_only_all = @machine.provider.driver.read_host_only_interfaces
47
- host_only_used = @machine.provider.driver.read_network_interfaces.
48
- select { |_, opts| opts[:type] == :hostonly }
49
-
50
- host_only_used.each do |_, opts|
51
- host_only_all.each do |interface|
52
- if @machine.provider.pd_version_satisfies?('>= 10')
53
- name_matched = interface[:name] == opts[:hostonly]
54
- else
55
- name_matched = interface[:bound_to] == opts[:hostonly]
56
- end
57
-
58
- return interface[:ip] if name_matched
59
- end
60
- end
61
-
62
- nil
63
- end
64
-
65
- # Returns the IP address of the guest by looking at the first
66
- # enabled host only network.
67
- #
68
- # @return [String] ip address of adapter in guest
69
- def read_machine_ip
70
- ips = []
71
- @machine.config.vm.networks.each do |type, options|
72
- if type == :private_network && options[:ip].is_a?(String)
73
- ips << options[:ip]
74
- end
75
- end
76
-
77
- if ips.empty?
78
- raise Vagrant::Errors::NFSNoGuestIP
79
- end
80
-
81
- ips
48
+ env[:nfs_machine_ip] = guest_ip
82
49
  end
83
50
  end
84
51
  end
@@ -304,8 +304,9 @@ module VagrantPlugins
304
304
  end
305
305
  end
306
306
 
307
- # This action sync folders on a running provider. It is used by the docker provider
308
- # to link synced folders on the host machine as volumes into the docker containers
307
+ # This is the action that is called to sync folders to a running machine
308
+ # without a reboot. It is used by the docker provider to link synced
309
+ # folders on the host machine as volumes into the docker containers.
309
310
  def self.action_sync_folders
310
311
  Vagrant::Action::Builder.new.tap do |b|
311
312
  b.use ConfigValidate
@@ -320,7 +321,7 @@ module VagrantPlugins
320
321
  b2.use Message, I18n.t("vagrant.commands.common.vm_not_running")
321
322
  next
322
323
  end
323
-
324
+ b2.use PrepareNFSValidIds
324
325
  b2.use SyncedFolders
325
326
  b2.use PrepareNFSSettings
326
327
  end
@@ -177,7 +177,8 @@ module VagrantPlugins
177
177
  def read_state
178
178
  end
179
179
 
180
- # Returns a value of specified VM option
180
+ # Returns a value of specified VM option. Raises an exception if value
181
+ # is not available
181
182
  #
182
183
  # @param [String] option Name of option (See all: `prlctl list -L`)
183
184
  # @param [String] uuid Virtual machine UUID
@@ -32,8 +32,7 @@ module VagrantPlugins
32
32
  # specific driver to instantiate.
33
33
  begin
34
34
  @version = read_version || ""
35
- rescue Vagrant::Errors::CommandUnavailable,
36
- Vagrant::Errors::CommandUnavailableWindows
35
+ rescue Vagrant::Errors::CommandUnavailable
37
36
  # This means that Parallels Desktop was not found, so we raise this
38
37
  # error here.
39
38
  raise VagrantPlugins::Parallels::Errors::ParallelsNotDetected
@@ -89,6 +88,7 @@ module VagrantPlugins
89
88
  :import,
90
89
  :read_bridged_interfaces,
91
90
  :read_forwarded_ports,
91
+ :read_guest_ip,
92
92
  :read_guest_tools_state,
93
93
  :read_guest_tools_iso_path,
94
94
  :read_host_only_interfaces,
@@ -101,6 +101,7 @@ module VagrantPlugins
101
101
  :read_state,
102
102
  :read_used_ports,
103
103
  :read_virtual_networks,
104
+ :read_vm_option,
104
105
  :read_vms,
105
106
  :read_vms_info,
106
107
  :read_vms_paths,
@@ -392,7 +392,12 @@ module VagrantPlugins
392
392
  end
393
393
 
394
394
  def read_vm_option(option, uuid=@uuid)
395
- execute_prlctl('list', uuid,'--no-header', '-o', option)
395
+ out = execute_prlctl('list', uuid,'--no-header', '-o', option).strip
396
+ if out.empty?
397
+ raise Errors::ParallelsVMOptionNotFound, vm_option: option
398
+ end
399
+
400
+ out
396
401
  end
397
402
 
398
403
  def read_vms
@@ -51,6 +51,10 @@ module VagrantPlugins
51
51
  error_key(:parallels_tpl_name_not_found)
52
52
  end
53
53
 
54
+ class ParallelsVMOptionNotFound < VagrantParallelsError
55
+ error_key(:parallels_vm_option_not_found)
56
+ end
57
+
54
58
  class VMImportFailure < VagrantParallelsError
55
59
  error_key(:vm_import_failure)
56
60
  end
@@ -15,10 +15,7 @@ module VagrantPlugins
15
15
  # version and all that, which checks for Parallels Desktop being present
16
16
  Driver::Meta.new
17
17
  true
18
- rescue VagrantPlugins::Parallels::Errors::ParallelsInvalidVersion
19
- raise if raise_error
20
- return false
21
- rescue VagrantPlugins::Parallels::Errors::ParallelsNotDetected
18
+ rescue Errors::VagrantParallelsError
22
19
  raise if raise_error
23
20
  return false
24
21
  end
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module Parallels
3
- VERSION = "1.3.3"
3
+ VERSION = "1.3.4"
4
4
  end
5
5
  end
data/locales/en.yml CHANGED
@@ -70,6 +70,11 @@ en:
70
70
  the box you're using is not corrupted and try again.
71
71
 
72
72
  Template config path: "%{config_path}"
73
+
74
+ parallels_vm_option_not_found: |-
75
+ Could not find a required option of Parallels Desktop virtual machine:
76
+ %{vm_option}
77
+ This is an internal error that should be reported as a bug.
73
78
  vm_import_failure: |-
74
79
  The VM import failed! Please verify that the box you're using is not
75
80
  corrupted and try again.
@@ -201,6 +201,27 @@ shared_examples "parallels desktop driver" do |options|
201
201
  end
202
202
  end
203
203
 
204
+ describe 'read_vm_option' do
205
+ it 'returns stripped value' do
206
+ subprocess.stub(:execute).
207
+ with('prlctl', 'list', uuid, '--no-header', '-o', an_instance_of(String),
208
+ an_instance_of(Hash)).
209
+ and_return(subprocess_result(stdout: "opt_val \n"))
210
+
211
+ subject.read_vm_option('supported_option').should == 'opt_val'
212
+ end
213
+
214
+ it 'raises an exception in option is not available' do
215
+ subprocess.stub(:execute).
216
+ with('prlctl', 'list', uuid, '--no-header', '-o', an_instance_of(String),
217
+ an_instance_of(Hash)).
218
+ and_return(subprocess_result(stdout: " \n"))
219
+
220
+ expect { subject.read_vm_option('invalid_option') }.
221
+ to raise_error(VagrantPlugins::Parallels::Errors::ParallelsVMOptionNotFound)
222
+ end
223
+ end
224
+
204
225
  describe "read_vms" do
205
226
  it "returns the list of all registered VMs and templates" do
206
227
  subject.read_vms.should be_kind_of(Hash)
@@ -295,7 +316,7 @@ shared_examples "parallels desktop driver" do |options|
295
316
  subject.version.should match(/^#{parallels_version}.\d+\.\d+$/)
296
317
  end
297
318
 
298
- it "rises ParallelsInvalidVersion exception for unsupported version" do
319
+ it "raises ParallelsInvalidVersion exception for unsupported version" do
299
320
  subprocess.should_receive(:execute).
300
321
  with("prlctl", "--version", an_instance_of(Hash)).
301
322
  and_return(subprocess_result(stdout: "prlctl version 7.0.12345"))
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: 1.3.3
4
+ version: 1.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikhail Zholobov
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-10-16 00:00:00.000000000 Z
12
+ date: 2014-10-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler