vagrant-parallels 2.4.1 → 2.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -1
- data/lib/vagrant-parallels/driver/base.rb +1 -54
- data/lib/vagrant-parallels/util/common.rb +0 -19
- data/lib/vagrant-parallels/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2b5666de284879e9b3ea20a38dc3a132ad280a89dd6ec516ce21bbf8ff839a5c
|
4
|
+
data.tar.gz: d1828f81d1ebcb19c8d0054372db475082a83b25ad23c7c0dba1fb07e74aa019
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d1f742e64b4fe8283cf110b4b9636291db21fca1686d92c38cc2376fe6b03cfa7a2e5c54a87ac16dab48052cf66e96f602dd920d860eb2886b83f21d52ff367
|
7
|
+
data.tar.gz: 7b2c507dfc64f46a168b7ee32c26e9db23e74306be8f5ec733166c669a363a45dd2119fca1c953a2f7e938fbeef303e1cc0bb691c51d0043a0344fa6f8a3662e
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,9 @@
|
|
1
|
-
## 2.4.
|
1
|
+
## 2.4.2 (Feb 5, 2024)
|
2
|
+
|
3
|
+
BUG FIXES:
|
4
|
+
- Revert "use clonefile copy for macvm boxes"
|
5
|
+
[[GH-464](https://github.com/Parallels/vagrant-parallels/pull/464)]
|
6
|
+
## 2.4.1 (Oct 16, 2023)
|
2
7
|
IMPROVEMENTS:
|
3
8
|
- use clonefile copy for macvm boxes
|
4
9
|
[[GH-459](https://github.com/Parallels/vagrant-parallels/pull/459)]
|
@@ -78,26 +78,7 @@ module VagrantPlugins
|
|
78
78
|
# @return [String] UUID of the new VM.
|
79
79
|
def clone_vm(src_name, options = {})
|
80
80
|
dst_name = "vagrant_temp_#{(Time.now.to_f * 1000.0).to_i}_#{rand(100000)}"
|
81
|
-
src_vm = json { execute_prlctl('list', '--json', '-i', src_name) }.first
|
82
81
|
|
83
|
-
if options[:linked] || !Util::Common.is_apfs?(src_vm.fetch('Home'))
|
84
|
-
# If linked clone is an option, or path to src is not on APFS, then do the normal clone.
|
85
|
-
prlctl_clone_vm(src_name, dst_name, options)
|
86
|
-
else
|
87
|
-
# We can use clonefile on APFS to do a fast CoW clone of the VM source and then register
|
88
|
-
copy_clone_vm(src_name, dst_name, options)
|
89
|
-
end
|
90
|
-
read_vms[dst_name]
|
91
|
-
end
|
92
|
-
|
93
|
-
# Uses prlctl to clone an existing registered VM
|
94
|
-
#
|
95
|
-
# @param [String] src_name Name or UUID of the source VM or template.
|
96
|
-
# @param [String] dst_name Name of the destination VM.
|
97
|
-
# @param [<String => String>] options Options to clone virtual machine.
|
98
|
-
def prlctl_clone_vm(src_name, dst_name, options = {})
|
99
|
-
list_args = ['list', '--json', '-i', src_name]
|
100
|
-
src_vm = json { execute_prlctl(*list_args) }.first
|
101
82
|
args = ['clone', src_name, '--name', dst_name]
|
102
83
|
args.concat(['--dst', options[:dst]]) if options[:dst]
|
103
84
|
|
@@ -116,41 +97,7 @@ module VagrantPlugins
|
|
116
97
|
yield $1.to_i if block_given?
|
117
98
|
end
|
118
99
|
end
|
119
|
-
|
120
|
-
|
121
|
-
# Uses cp with clonefile flag to clone an existing registered VM
|
122
|
-
#
|
123
|
-
# @param [String] src_name Name or UUID of the source VM or template.
|
124
|
-
# @param [String] dst_name Name of the destination VM.
|
125
|
-
# @param [<String => String>] options Options to clone virtual machine.
|
126
|
-
def copy_clone_vm(src_name, dst_name, options = {})
|
127
|
-
list_args = ['list', '--json', '-i', src_name]
|
128
|
-
src_vm = json { execute_prlctl(*list_args) }.first
|
129
|
-
basepath = File.dirname(src_vm.fetch('Home')).delete_suffix('/')
|
130
|
-
extension = File.basename(src_vm.fetch('Home')).delete_suffix('/').split('.').last
|
131
|
-
clonepath = File.join(ENV['HOME'], "Parallels", "#{dst_name}.#{extension}")
|
132
|
-
execute('cp', '-c', '-R', '-p', src_vm.fetch('Home'), clonepath)
|
133
|
-
|
134
|
-
# Update config.pvs with dst_name as this is what Parallels uses when registering
|
135
|
-
update_vm_name(File.join(clonepath, 'config.pvs'), dst_name)
|
136
|
-
|
137
|
-
# Register the cloned path as a new VM
|
138
|
-
args = ['register', clonepath]
|
139
|
-
# Regenerate SourceVmUuid of the cloned VM
|
140
|
-
args << '--regenerate-src-uuid' if options[:regenerate_src_uuid]
|
141
|
-
|
142
|
-
# Regenerate SourceVmUuid of the cloned VM
|
143
|
-
execute_prlctl(*args)
|
144
|
-
|
145
|
-
# Don't need the box hanging around in Parallels
|
146
|
-
execute_prlctl('unregister', src_name)
|
147
|
-
end
|
148
|
-
|
149
|
-
def update_vm_name(config_pvs_path, name)
|
150
|
-
xml = Nokogiri::XML(File.read(config_pvs_path))
|
151
|
-
elem = xml.at_xpath('//ParallelsVirtualMachine/Identification/VmName')
|
152
|
-
elem.content = name
|
153
|
-
File.write(config_pvs_path, xml.to_xml)
|
100
|
+
read_vms[dst_name]
|
154
101
|
end
|
155
102
|
|
156
103
|
# Compacts the specified virtual disk image
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'shellwords'
|
2
|
-
|
3
1
|
module VagrantPlugins
|
4
2
|
module Parallels
|
5
3
|
module Util
|
@@ -11,23 +9,6 @@ module VagrantPlugins
|
|
11
9
|
return !machine.box.nil? && !!Dir.glob(machine.box.directory.join('*.macvm')).first
|
12
10
|
end
|
13
11
|
|
14
|
-
# Determines if the box directory is on an APFS filesystem
|
15
|
-
def self.is_apfs?(path, &block)
|
16
|
-
output = {stdout: '', stderr: ''}
|
17
|
-
df_command = %w[df -T apfs]
|
18
|
-
df_command << Shellwords.escape(path)
|
19
|
-
execute(*df_command, &block).exit_code == 0
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def self.execute(*command, &block)
|
25
|
-
command << { notify: [:stdout, :stderr] }
|
26
|
-
|
27
|
-
Vagrant::Util::Busy.busy(lambda {}) do
|
28
|
-
Vagrant::Util::Subprocess.execute(*command, &block)
|
29
|
-
end
|
30
|
-
end
|
31
12
|
end
|
32
13
|
end
|
33
14
|
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: 2.4.
|
4
|
+
version: 2.4.2
|
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:
|
12
|
+
date: 2024-02-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|