vagrant-parallels 1.7.7 → 2.2.0
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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +73 -35
- data/README.md +29 -31
- data/lib/vagrant-parallels/action.rb +2 -0
- data/lib/vagrant-parallels/action/box_unregister.rb +2 -2
- data/lib/vagrant-parallels/action/import.rb +2 -12
- data/lib/vagrant-parallels/action/network.rb +6 -1
- data/lib/vagrant-parallels/action/package_vagrantfile.rb +33 -0
- data/lib/vagrant-parallels/action/prepare_clone_snapshot.rb +1 -2
- data/lib/vagrant-parallels/action/sane_defaults.rb +3 -18
- data/lib/vagrant-parallels/cap/mount_options.rb +39 -0
- data/lib/vagrant-parallels/config.rb +1 -1
- data/lib/vagrant-parallels/driver/base.rb +14 -36
- data/lib/vagrant-parallels/driver/meta.rb +6 -8
- data/lib/vagrant-parallels/driver/pd_11.rb +2 -2
- data/lib/vagrant-parallels/driver/pd_12.rb +1 -1
- data/lib/vagrant-parallels/errors.rb +9 -5
- data/lib/vagrant-parallels/guest_cap/linux/mount_parallels_shared_folder.rb +31 -64
- data/lib/vagrant-parallels/plugin.rb +15 -1
- data/lib/vagrant-parallels/synced_folder.rb +10 -20
- data/lib/vagrant-parallels/util/unix_mount_helpers.rb +121 -0
- data/lib/vagrant-parallels/version.rb +1 -1
- data/locales/en.yml +27 -14
- metadata +14 -13
- data/lib/vagrant-parallels/driver/pd_10.rb +0 -20
@@ -0,0 +1,121 @@
|
|
1
|
+
require "shellwords"
|
2
|
+
require "vagrant/util/retryable"
|
3
|
+
|
4
|
+
module VagrantPlugins
|
5
|
+
module Parallels
|
6
|
+
module Util
|
7
|
+
module UnixMountHelpers
|
8
|
+
|
9
|
+
def self.extended(klass)
|
10
|
+
if !klass.class_variable_defined?(:@@logger)
|
11
|
+
klass.class_variable_set(:@@logger, Log4r::Logger.new(klass.name.downcase))
|
12
|
+
end
|
13
|
+
klass.extend Vagrant::Util::Retryable
|
14
|
+
end
|
15
|
+
|
16
|
+
def detect_owner_group_ids(machine, guest_path, mount_options, options)
|
17
|
+
mount_uid = find_mount_options_id("uid", mount_options)
|
18
|
+
mount_gid = find_mount_options_id("gid", mount_options)
|
19
|
+
|
20
|
+
if mount_uid.nil?
|
21
|
+
if options[:owner].to_i.to_s == options[:owner].to_s
|
22
|
+
mount_uid = options[:owner]
|
23
|
+
self.class_variable_get(:@@logger).debug("Owner user ID (provided): #{mount_uid}")
|
24
|
+
else
|
25
|
+
output = {stdout: '', stderr: ''}
|
26
|
+
uid_command = "id -u #{options[:owner]}"
|
27
|
+
machine.communicate.execute(uid_command,
|
28
|
+
error_class: Errors::ParallelsMountFailed,
|
29
|
+
error_key: :parallels_mount_failed,
|
30
|
+
command: uid_command,
|
31
|
+
output: output[:stderr]
|
32
|
+
) { |type, data| output[type] << data if output[type] }
|
33
|
+
mount_uid = output[:stdout].chomp
|
34
|
+
self.class_variable_get(:@@logger).debug("Owner user ID (lookup): #{options[:owner]} -> #{mount_uid}")
|
35
|
+
end
|
36
|
+
else
|
37
|
+
machine.ui.warn "Detected mount owner ID within mount options. (uid: #{mount_uid} guestpath: #{guest_path})"
|
38
|
+
end
|
39
|
+
|
40
|
+
if mount_gid.nil?
|
41
|
+
if options[:group].to_i.to_s == options[:group].to_s
|
42
|
+
mount_gid = options[:group]
|
43
|
+
self.class_variable_get(:@@logger).debug("Owner group ID (provided): #{mount_gid}")
|
44
|
+
else
|
45
|
+
begin
|
46
|
+
output = {stdout: '', stderr: ''}
|
47
|
+
gid_command = "getent group #{options[:group]}"
|
48
|
+
machine.communicate.execute(gid_command,
|
49
|
+
error_class: Errors::ParallelsMountFailed,
|
50
|
+
error_key: :parallels_mount_failed,
|
51
|
+
command: gid_command,
|
52
|
+
output: output[:stderr]
|
53
|
+
) { |type, data| output[type] << data if output[type] }
|
54
|
+
mount_gid = output[:stdout].split(':').at(2).to_s.chomp
|
55
|
+
self.class_variable_get(:@@logger).debug("Owner group ID (lookup): #{options[:group]} -> #{mount_gid}")
|
56
|
+
rescue Vagrant::Errors::ParallelsMountFailed
|
57
|
+
if options[:owner] == options[:group]
|
58
|
+
self.class_variable_get(:@@logger).debug("Failed to locate group `#{options[:group]}`. Group name matches owner. Fetching effective group ID.")
|
59
|
+
output = {stdout: ''}
|
60
|
+
result = machine.communicate.execute("id -g #{options[:owner]}",
|
61
|
+
error_check: false
|
62
|
+
) { |type, data| output[type] << data if output[type] }
|
63
|
+
mount_gid = output[:stdout].chomp if result == 0
|
64
|
+
self.class_variable_get(:@@logger).debug("Owner group ID (effective): #{mount_gid}")
|
65
|
+
end
|
66
|
+
raise unless mount_gid
|
67
|
+
end
|
68
|
+
end
|
69
|
+
else
|
70
|
+
machine.ui.warn "Detected mount group ID within mount options. (gid: #{mount_gid} guestpath: #{guest_path})"
|
71
|
+
end
|
72
|
+
{:gid => mount_gid, :uid => mount_uid}
|
73
|
+
end
|
74
|
+
|
75
|
+
def find_mount_options_id(id_name, mount_options)
|
76
|
+
id_line = mount_options.detect{|line| line.include?("#{id_name}=")}
|
77
|
+
if id_line
|
78
|
+
match = id_line.match(/,?#{Regexp.escape(id_name)}=(?<option_id>\d+),?/)
|
79
|
+
found_id = match["option_id"]
|
80
|
+
updated_id_line = [
|
81
|
+
match.pre_match,
|
82
|
+
match.post_match
|
83
|
+
].find_all{|string| !string.empty?}.join(',')
|
84
|
+
if updated_id_line.empty?
|
85
|
+
mount_options.delete(id_line)
|
86
|
+
else
|
87
|
+
idx = mount_options.index(id_line)
|
88
|
+
mount_options.delete(idx)
|
89
|
+
mount_options.insert(idx, updated_id_line)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
found_id
|
93
|
+
end
|
94
|
+
|
95
|
+
def emit_upstart_notification(machine, guest_path)
|
96
|
+
# Emit an upstart event if we can
|
97
|
+
machine.communicate.sudo <<-EOH.gsub(/^ {12}/, "")
|
98
|
+
if command -v /sbin/init && /sbin/init 2>/dev/null --version | grep upstart; then
|
99
|
+
/sbin/initctl emit --no-wait vagrant-mounted MOUNTPOINT=#{guest_path}
|
100
|
+
fi
|
101
|
+
EOH
|
102
|
+
end
|
103
|
+
|
104
|
+
def merge_mount_options(base, overrides)
|
105
|
+
base = base.join(",").split(",")
|
106
|
+
overrides = overrides.join(",").split(",")
|
107
|
+
b_kv = Hash[base.map{|item| item.split("=", 2) }]
|
108
|
+
o_kv = Hash[overrides.map{|item| item.split("=", 2) }]
|
109
|
+
merged = {}.tap do |opts|
|
110
|
+
(b_kv.keys + o_kv.keys).uniq.each do |key|
|
111
|
+
opts[key] = o_kv.fetch(key, b_kv[key])
|
112
|
+
end
|
113
|
+
end
|
114
|
+
merged.map do |key, value|
|
115
|
+
[key, value].compact.join("=")
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
data/locales/en.yml
CHANGED
@@ -45,26 +45,26 @@ en:
|
|
45
45
|
disk is inconsistent, please remove it from the VM configuration.
|
46
46
|
|
47
47
|
Disk image path: %{path}
|
48
|
-
linux_mount_failed: |-
|
49
|
-
Failed to mount folders in Linux guest. This is usually because
|
50
|
-
the "prl_fs" file system is not available. Please verify that
|
51
|
-
Parallels Tools are properly installed in the guest and
|
52
|
-
can work properly. If so, the VM reboot can solve a problem.
|
53
|
-
The command attempted was:
|
54
|
-
|
55
|
-
%{command}
|
56
48
|
linux_prl_fs_invalid_options: |-
|
57
49
|
Failed to mount folders in Linux guest. You've specified mount options
|
58
50
|
which are not supported by "prl_fs" file system.
|
59
51
|
|
60
52
|
Invalid mount options: %{options}
|
53
|
+
network_collision: |-
|
54
|
+
The specified host network collides with a non-hostonly network!
|
55
|
+
This will cause your specified IP to be inaccessible. Please change
|
56
|
+
the IP or name of your host only network so that it no longer matches that of
|
57
|
+
a bridged or non-hostonly network.
|
58
|
+
|
59
|
+
Host-only Network Address: '%{hostonly_netaddr}'
|
60
|
+
Bridged Network '%{bridge_interface}': '%{bridge_netaddr}'
|
61
61
|
network_invalid_address: |-
|
62
62
|
Network settings specified in your Vagrantfile are invalid:
|
63
63
|
|
64
64
|
Network settings: %{options}
|
65
65
|
Error: %{error}
|
66
66
|
mac_os_x_required: |-
|
67
|
-
Parallels provider works only on
|
67
|
+
Parallels provider works only on macOS (Mac OS X) systems.
|
68
68
|
parallels_install_incomplete: |-
|
69
69
|
Parallels Desktop is complaining that the installation is incomplete.
|
70
70
|
Try to reinstall Parallels Desktop or contact Parallels support.
|
@@ -73,6 +73,19 @@ en:
|
|
73
73
|
%{output}
|
74
74
|
|
75
75
|
This is an internal error that should be reported as a bug.
|
76
|
+
parallels_mount_failed: |-
|
77
|
+
Vagrant was unable to mount Parallels Desktop shared folders. This is usually
|
78
|
+
because the filesystem "prl_fs" is not available. This filesystem is
|
79
|
+
made available via the Parallels Tools and kernel module.
|
80
|
+
Please verify that these guest tools are properly installed in the
|
81
|
+
guest. This is not a bug in Vagrant and is usually caused by a faulty
|
82
|
+
Vagrant box. For context, the command attempted was:
|
83
|
+
|
84
|
+
%{command}
|
85
|
+
|
86
|
+
The error output from the command was:
|
87
|
+
|
88
|
+
%{output}
|
76
89
|
parallels_no_room_for_high_level_network: |-
|
77
90
|
There is no available slots on the Parallels Desktop VM for the configured
|
78
91
|
high-level network interfaces. "private_network" and "public_network"
|
@@ -101,12 +114,12 @@ en:
|
|
101
114
|
only with Pro and Business editions of Parallels Desktop. Other editions
|
102
115
|
do not have command line functionality and can not be used with Vagrant.
|
103
116
|
|
104
|
-
Please upgrade your installation:
|
117
|
+
Please upgrade your installation: https://parallels.com/desktop
|
105
118
|
parallels_unsupported_version: |-
|
106
119
|
Vagrant has detected that you have a version of Parallels Desktop for Mac
|
107
120
|
installed that is not supported. Vagrant Parallels provider is compatible
|
108
|
-
only with Parallels Desktop
|
109
|
-
Please upgrade your installation:
|
121
|
+
only with Parallels Desktop 11 or later.
|
122
|
+
Please upgrade your installation: https://parallels.com/desktop
|
110
123
|
|
111
124
|
Note: Starting since Parallels Desktop 11 for Mac, Vagrant Parallels
|
112
125
|
provider can be only used with Pro or Business edition of Parallels
|
@@ -205,8 +218,8 @@ en:
|
|
205
218
|
check_shared_interface:
|
206
219
|
connecting: Connecting host to Shared network...
|
207
220
|
clone:
|
208
|
-
full:
|
209
|
-
linked: Creating new virtual machine as a linked clone...
|
221
|
+
full: Creating new virtual machine as a full clone of the box image...
|
222
|
+
linked: Creating new virtual machine as a linked clone of the box image...
|
210
223
|
handle_guest_tools:
|
211
224
|
cant_install: |-
|
212
225
|
Vagrant doesn't support installing Parallels Tools for the guest OS
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-parallels
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mikhail Zholobov
|
8
8
|
- Youssef Shahin
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-03-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
34
|
+
version: 12.3.3
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
41
|
+
version: 12.3.3
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rspec
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,14 +59,14 @@ dependencies:
|
|
59
59
|
requirements:
|
60
60
|
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: 1.
|
62
|
+
version: 1.3.0
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 1.
|
69
|
+
version: 1.3.0
|
70
70
|
description: Enables Vagrant to manage Parallels virtual machines.
|
71
71
|
email:
|
72
72
|
- mzholobov@parallels.com
|
@@ -98,6 +98,7 @@ files:
|
|
98
98
|
- lib/vagrant-parallels/action/network.rb
|
99
99
|
- lib/vagrant-parallels/action/package.rb
|
100
100
|
- lib/vagrant-parallels/action/package_config_files.rb
|
101
|
+
- lib/vagrant-parallels/action/package_vagrantfile.rb
|
101
102
|
- lib/vagrant-parallels/action/prepare_clone_snapshot.rb
|
102
103
|
- lib/vagrant-parallels/action/prepare_forwarded_port_collision_params.rb
|
103
104
|
- lib/vagrant-parallels/action/prepare_nfs_settings.rb
|
@@ -111,10 +112,10 @@ files:
|
|
111
112
|
- lib/vagrant-parallels/action/snapshot_save.rb
|
112
113
|
- lib/vagrant-parallels/action/suspend.rb
|
113
114
|
- lib/vagrant-parallels/cap.rb
|
115
|
+
- lib/vagrant-parallels/cap/mount_options.rb
|
114
116
|
- lib/vagrant-parallels/config.rb
|
115
117
|
- lib/vagrant-parallels/driver/base.rb
|
116
118
|
- lib/vagrant-parallels/driver/meta.rb
|
117
|
-
- lib/vagrant-parallels/driver/pd_10.rb
|
118
119
|
- lib/vagrant-parallels/driver/pd_11.rb
|
119
120
|
- lib/vagrant-parallels/driver/pd_12.rb
|
120
121
|
- lib/vagrant-parallels/errors.rb
|
@@ -128,13 +129,14 @@ files:
|
|
128
129
|
- lib/vagrant-parallels/provider.rb
|
129
130
|
- lib/vagrant-parallels/synced_folder.rb
|
130
131
|
- lib/vagrant-parallels/util/compile_forwarded_ports.rb
|
132
|
+
- lib/vagrant-parallels/util/unix_mount_helpers.rb
|
131
133
|
- lib/vagrant-parallels/version.rb
|
132
134
|
- locales/en.yml
|
133
|
-
homepage:
|
135
|
+
homepage: https://github.com/Parallels/vagrant-parallels
|
134
136
|
licenses:
|
135
137
|
- MIT
|
136
138
|
metadata: {}
|
137
|
-
post_install_message:
|
139
|
+
post_install_message:
|
138
140
|
rdoc_options: []
|
139
141
|
require_paths:
|
140
142
|
- lib
|
@@ -149,9 +151,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
151
|
- !ruby/object:Gem::Version
|
150
152
|
version: 1.3.6
|
151
153
|
requirements: []
|
152
|
-
|
153
|
-
|
154
|
-
signing_key:
|
154
|
+
rubygems_version: 3.0.3
|
155
|
+
signing_key:
|
155
156
|
specification_version: 4
|
156
157
|
summary: Parallels provider for Vagrant.
|
157
158
|
test_files: []
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'log4r'
|
2
|
-
|
3
|
-
require 'vagrant/util/platform'
|
4
|
-
|
5
|
-
require_relative 'base'
|
6
|
-
|
7
|
-
module VagrantPlugins
|
8
|
-
module Parallels
|
9
|
-
module Driver
|
10
|
-
# Driver for Parallels Desktop 10.
|
11
|
-
class PD_10 < Base
|
12
|
-
def initialize(uuid)
|
13
|
-
super(uuid)
|
14
|
-
|
15
|
-
@logger = Log4r::Logger.new('vagrant_parallels::driver::pd_10')
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|