vagrant-parallels 1.0.9.rc1 → 1.1.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 +4 -4
- data/lib/vagrant-parallels/action.rb +121 -122
- data/lib/vagrant-parallels/action/customize.rb +2 -3
- data/lib/vagrant-parallels/action/handle_guest_tools.rb +51 -0
- data/lib/vagrant-parallels/action/import.rb +1 -1
- data/lib/vagrant-parallels/action/is_driver_version.rb +28 -0
- data/lib/vagrant-parallels/action/set_power_consumption.rb +2 -6
- data/lib/vagrant-parallels/config.rb +6 -0
- data/lib/vagrant-parallels/driver/base.rb +42 -57
- data/lib/vagrant-parallels/driver/meta.rb +4 -5
- data/lib/vagrant-parallels/driver/pd_8.rb +80 -50
- data/lib/vagrant-parallels/driver/pd_9.rb +7 -7
- data/lib/vagrant-parallels/errors.rb +8 -4
- data/lib/vagrant-parallels/guest_cap/linux/install_parallels_tools.rb +53 -0
- data/lib/vagrant-parallels/plugin.rb +7 -2
- data/lib/vagrant-parallels/version.rb +1 -1
- data/locales/en.yml +34 -29
- data/test/unit/driver/pd_8_test.rb +3 -0
- data/test/unit/driver/pd_9_test.rb +3 -0
- data/test/unit/support/shared/pd_driver_examples.rb +33 -9
- metadata +5 -14
- data/lib/vagrant-parallels/action/check_accessible.rb +0 -23
- data/lib/vagrant-parallels/action/check_created.rb +0 -21
- data/lib/vagrant-parallels/action/check_guest_tools.rb +0 -37
- data/lib/vagrant-parallels/action/check_parallels.rb +0 -22
- data/lib/vagrant-parallels/action/check_running.rb +0 -21
- data/lib/vagrant-parallels/action/created.rb +0 -20
- data/lib/vagrant-parallels/action/is_running.rb +0 -20
- data/lib/vagrant-parallels/action/is_suspended.rb +0 -21
- data/lib/vagrant-parallels/action/message_already_running.rb +0 -16
- data/lib/vagrant-parallels/action/message_not_created.rb +0 -16
- data/lib/vagrant-parallels/action/message_not_running.rb +0 -16
- data/lib/vagrant-parallels/action/message_will_not_destroy.rb +0 -17
@@ -16,12 +16,12 @@ module VagrantPlugins
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def read_settings
|
19
|
-
vm = json {
|
19
|
+
vm = json { execute_prlctl('list', @uuid, '--info', '--json') }
|
20
20
|
vm.last
|
21
21
|
end
|
22
22
|
|
23
23
|
def read_state
|
24
|
-
vm = json {
|
24
|
+
vm = json { execute_prlctl('list', @uuid, '--json') }
|
25
25
|
return nil if !vm.last
|
26
26
|
vm.last.fetch('status').to_sym
|
27
27
|
end
|
@@ -29,10 +29,10 @@ module VagrantPlugins
|
|
29
29
|
def read_vms
|
30
30
|
results = {}
|
31
31
|
vms_arr = json([]) do
|
32
|
-
|
32
|
+
execute_prlctl('list', '--all', '--json')
|
33
33
|
end
|
34
34
|
templates_arr = json([]) do
|
35
|
-
|
35
|
+
execute_prlctl('list', '--all', '--json', '--template')
|
36
36
|
end
|
37
37
|
vms = vms_arr | templates_arr
|
38
38
|
vms.each do |item|
|
@@ -45,17 +45,17 @@ module VagrantPlugins
|
|
45
45
|
# Parse the JSON from *all* VMs and templates. Then return an array of objects (without duplicates)
|
46
46
|
def read_vms_info
|
47
47
|
vms_arr = json([]) do
|
48
|
-
|
48
|
+
execute_prlctl('list', '--all','--info', '--json')
|
49
49
|
end
|
50
50
|
templates_arr = json([]) do
|
51
|
-
|
51
|
+
execute_prlctl('list', '--all','--info', '--json', '--template')
|
52
52
|
end
|
53
53
|
vms_arr | templates_arr
|
54
54
|
end
|
55
55
|
|
56
56
|
def set_power_consumption_mode(optimized)
|
57
57
|
state = optimized ? 'on' : 'off'
|
58
|
-
|
58
|
+
execute_prlctl('set', @uuid, '--longer-battery-life', state)
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
@@ -15,8 +15,8 @@ module VagrantPlugins
|
|
15
15
|
error_key(:mac_os_x_required)
|
16
16
|
end
|
17
17
|
|
18
|
-
class
|
19
|
-
error_key(:
|
18
|
+
class ExecutionError < VagrantParallelsError
|
19
|
+
error_key(:execution_error)
|
20
20
|
end
|
21
21
|
|
22
22
|
class ParallelsInstallIncomplete < VagrantParallelsError
|
@@ -35,8 +35,12 @@ module VagrantPlugins
|
|
35
35
|
error_key(:parallels_no_room_for_high_level_network)
|
36
36
|
end
|
37
37
|
|
38
|
-
class
|
39
|
-
error_key(:
|
38
|
+
class ParallelsToolsIsoNotFound < VagrantParallelsError
|
39
|
+
error_key(:parallels_tools_iso_not_found)
|
40
|
+
end
|
41
|
+
|
42
|
+
class VMImportFailure < VagrantParallelsError
|
43
|
+
error_key(:vm_import_failure)
|
40
44
|
end
|
41
45
|
|
42
46
|
class VMNameExists < VagrantParallelsError
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Parallels
|
3
|
+
module GuestLinuxCap
|
4
|
+
class InstallParallelsTools
|
5
|
+
|
6
|
+
def self.install_parallels_tools(machine)
|
7
|
+
if ptiagent_usable?(machine)
|
8
|
+
# Argument '--info' means that Parallels Tools version will be
|
9
|
+
# checked before the installing.
|
10
|
+
machine.communicate.sudo("ptiagent-cmd --info")
|
11
|
+
else
|
12
|
+
machine.communicate.tap do |comm|
|
13
|
+
tools_iso_path = File.expand_path(
|
14
|
+
machine.provider.driver.read_guest_tools_iso_path("linux"),
|
15
|
+
machine.env.root_path
|
16
|
+
)
|
17
|
+
remote_file = "/tmp/prl-tools-lin.iso"
|
18
|
+
mount_point = "/media/prl-tools-lin_#{rand(100000)}/"
|
19
|
+
|
20
|
+
comm.upload(tools_iso_path, remote_file)
|
21
|
+
|
22
|
+
# Create mount point directory if needed
|
23
|
+
if !comm.test("test -d \"#{mount_point}\"", :sudo => true)
|
24
|
+
comm.sudo("mkdir -p \"#{mount_point}\"")
|
25
|
+
end
|
26
|
+
|
27
|
+
# Mount ISO and install Parallels Tools
|
28
|
+
comm.sudo("mount -o loop #{remote_file} #{mount_point}")
|
29
|
+
comm.sudo("#{mount_point}/install --install-unattended-with-deps")
|
30
|
+
comm.sudo("umount -f \"#{mount_point}\"")
|
31
|
+
|
32
|
+
comm.sudo("rm -Rf \"#{mount_point}\"")
|
33
|
+
comm.sudo("rm -f \"#{remote_file}\"")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
# This helper detects is Parallels Tools Installation Agent (PTIAgent)
|
41
|
+
# available and can be used
|
42
|
+
def self.ptiagent_usable?(machine)
|
43
|
+
# Parallels Desktop 9 or higher should be installed on the host and
|
44
|
+
# 'ptiagent-cmd' binary should be available on the guest
|
45
|
+
|
46
|
+
machine.provider_name == :parallels &&
|
47
|
+
Gem::Version.new(machine.provider.driver.version) >= Gem::Version.new("9") &&
|
48
|
+
machine.communicate.test("which ptiagent-cmd", :sudo => true)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -45,11 +45,16 @@ module VagrantPlugins
|
|
45
45
|
GuestLinuxCap::MountParallelsSharedFolder
|
46
46
|
end
|
47
47
|
|
48
|
-
guest_capability(:linux, :
|
49
|
-
require_relative "guest_cap/linux/
|
48
|
+
guest_capability(:linux, :unmount_parallels_shared_folder) do
|
49
|
+
require_relative "guest_cap/linux/mount_parallels_shared_folder"
|
50
50
|
GuestLinuxCap::MountParallelsSharedFolder
|
51
51
|
end
|
52
52
|
|
53
|
+
guest_capability(:linux, :install_parallels_tools) do
|
54
|
+
require_relative "guest_cap/linux/install_parallels_tools"
|
55
|
+
GuestLinuxCap::InstallParallelsTools
|
56
|
+
end
|
57
|
+
|
53
58
|
provider_capability(:parallels, :public_address) do
|
54
59
|
require_relative "cap/public_address"
|
55
60
|
Cap::PublicAddress
|
data/locales/en.yml
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
en:
|
2
2
|
vagrant_parallels:
|
3
3
|
parallels:
|
4
|
-
checking_guest_tools: |-
|
5
|
-
Checking for Parallels Tools installed on the VM...
|
6
4
|
power_consumption:
|
7
5
|
set_mode: |-
|
8
6
|
Setting power consumption mode: "%{mode}"
|
@@ -18,15 +16,14 @@ en:
|
|
18
16
|
readable for the user that is running Vagrant.
|
19
17
|
|
20
18
|
Parallels DHCP leases file: %{leases_file}
|
21
|
-
|
22
|
-
|
23
|
-
prlctl_error: |-
|
24
|
-
There was an error while executing `prlctl`, a CLI used by Vagrant
|
25
|
-
for controlling Parallels Desktop. The command and stderr is shown below.
|
19
|
+
execution_error: |-
|
20
|
+
There was an error while command execution. The command and stderr is shown below.
|
26
21
|
|
27
22
|
Command: %{command}
|
28
23
|
|
29
24
|
Stderr: %{stderr}
|
25
|
+
mac_os_x_required: |-
|
26
|
+
Parallels provider works only on OS X (Mac OS X) systems.
|
30
27
|
parallels_install_incomplete: |-
|
31
28
|
Parallels Desktop is complaining that the installation is incomplete.
|
32
29
|
Try to reinstall Parallels Desktop or contact Parallels support.
|
@@ -48,11 +45,16 @@ en:
|
|
48
45
|
Vagrant uses the `prlctl` binary that ships with Parallels Desktop, and requires
|
49
46
|
this to be available on the PATH. If Parallels Desktop is installed, please find
|
50
47
|
the `prlctl` binary and add it to the PATH environmental variable.
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
48
|
+
parallels_tools_iso_not_found: |-
|
49
|
+
Parallels Tools ISO file does not exists. The Parallels provider uses it
|
50
|
+
to install or update Parallels Tools in the guest machine. Try to
|
51
|
+
reinstall Parallels Desktop.
|
52
|
+
|
53
|
+
Expected ISO path: "%{iso_path}"
|
54
|
+
vm_import_failure: |-
|
55
|
+
The VM import failed! Please verify that the box you're using is not
|
56
|
+
corrupted and try again.
|
57
|
+
|
56
58
|
vm_name_exists: |-
|
57
59
|
Parallels Desktop virtual machine with the name '%{name}' already exists.
|
58
60
|
Please use another name or delete the machine with the existing
|
@@ -101,23 +103,26 @@ en:
|
|
101
103
|
#-------------------------------------------------------------------------------
|
102
104
|
actions:
|
103
105
|
vm:
|
104
|
-
|
106
|
+
handle_guest_tools:
|
107
|
+
cant_install: |-
|
108
|
+
Vagrant doesn't support installing Parallels Tools for the guest OS
|
109
|
+
running in the machine. Vagrant attempt to continue, assuming that
|
110
|
+
Parallels Tools will be installed later.
|
111
|
+
checking: |-
|
112
|
+
Checking for Parallels Tools installed on the VM...
|
113
|
+
installing: |-
|
114
|
+
Installing the proper version of Parallels Tools. This may take a few minutes...
|
105
115
|
not_detected: |-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
shared folder errors, please update the Parallels Tools within the
|
118
|
-
virtual machine and reload your VM.
|
119
|
-
|
120
|
-
Parallels Tools Version: %{tools_version}
|
121
|
-
Parallels Desktop Version: %{parallels_version}
|
116
|
+
Parallels Tools were not detected on this VM! They are required
|
117
|
+
for forwarded ports, shared folders, host only networking and more.
|
118
|
+
If SSH fails or shared folders are not working on this machine,
|
119
|
+
please install Parallels Tools within the virtual machine and
|
120
|
+
reload your VM.
|
121
|
+
outdated: |-
|
122
|
+
Parallels Tools installed on this VM are outdated! In most cases
|
123
|
+
this is fine but in rare cases it can cause things such as shared
|
124
|
+
folders to not work properly. If you see shared folder errors,
|
125
|
+
please update Parallels Tools within the virtual machine and
|
126
|
+
reload your VM.
|
122
127
|
export:
|
123
128
|
compacting: Compacting exported HDDs...
|
@@ -9,6 +9,7 @@ describe VagrantPlugins::Parallels::Driver::PD_8 do
|
|
9
9
|
let(:tpl_uuid) {'1234-some-template-uuid-5678'}
|
10
10
|
let(:tpl_name) {'Some_Template_Name'}
|
11
11
|
|
12
|
+
let(:tools_state) {'installed'}
|
12
13
|
let(:tools_version) {'8.0.18615.123456'}
|
13
14
|
|
14
15
|
let(:hostonly_iface) {'vnic10'}
|
@@ -75,6 +76,7 @@ INFO[
|
|
75
76
|
"State": "stopped",
|
76
77
|
"Home": "/path/to/#{vm_name}.pvm/",
|
77
78
|
"GuestTools": {
|
79
|
+
"state": "#{tools_state}",
|
78
80
|
"version": "#{tools_version}"
|
79
81
|
},
|
80
82
|
"Hardware": {
|
@@ -135,6 +137,7 @@ INFO[
|
|
135
137
|
"State": "stopped",
|
136
138
|
"Home": "/path/to/#{tpl_name}.pvm/",
|
137
139
|
"GuestTools": {
|
140
|
+
"state": "#{tools_state}",
|
138
141
|
"version": "#{tools_version}"
|
139
142
|
},
|
140
143
|
"Hardware": {
|
@@ -9,6 +9,7 @@ describe VagrantPlugins::Parallels::Driver::PD_9 do
|
|
9
9
|
let(:tpl_uuid) {'1234-some-template-uuid-5678'}
|
10
10
|
let(:tpl_name) {'Some_Template_Name'}
|
11
11
|
|
12
|
+
let(:tools_state) {'installed'}
|
12
13
|
let(:tools_version) {'9.0.23062.123456'}
|
13
14
|
|
14
15
|
let(:hostonly_iface) {'vnic10'}
|
@@ -75,6 +76,7 @@ describe VagrantPlugins::Parallels::Driver::PD_9 do
|
|
75
76
|
"State": "stopped",
|
76
77
|
"Home": "/path/to/#{vm_name}.pvm/",
|
77
78
|
"GuestTools": {
|
79
|
+
"state": "#{tools_state}",
|
78
80
|
"version": "#{tools_version}"
|
79
81
|
},
|
80
82
|
"Hardware": {
|
@@ -135,6 +137,7 @@ describe VagrantPlugins::Parallels::Driver::PD_9 do
|
|
135
137
|
"State": "stopped",
|
136
138
|
"Home": "/path/to/#{tpl_name}.pvm/",
|
137
139
|
"GuestTools": {
|
140
|
+
"state": "#{tools_state}",
|
138
141
|
"version": "#{tools_version}"
|
139
142
|
},
|
140
143
|
"Hardware": {
|
@@ -146,18 +146,16 @@ shared_examples "parallels desktop driver" do |options|
|
|
146
146
|
end
|
147
147
|
end
|
148
148
|
|
149
|
-
describe "
|
150
|
-
let(:
|
149
|
+
describe "read_guest_tools_state" do
|
150
|
+
let(:tools_state) {'outdated'}
|
151
151
|
|
152
|
-
it "returns Guest Tools
|
153
|
-
subject.
|
154
|
-
subject.read_guest_tools_version.should == "9.0.23062"
|
152
|
+
it "returns Guest Tools state as a symbol" do
|
153
|
+
subject.read_guest_tools_state.should be(:outdated)
|
155
154
|
end
|
156
155
|
|
157
|
-
it "returns
|
158
|
-
|
159
|
-
|
160
|
-
subject.read_guest_tools_version.should be_nil
|
156
|
+
it "returns :not_installed if Guest Tools state can't be reached" do
|
157
|
+
driver.should_receive(:read_settings).and_return(exit_code: 0)
|
158
|
+
subject.read_guest_tools_state.should be(:not_installed)
|
161
159
|
end
|
162
160
|
end
|
163
161
|
|
@@ -181,6 +179,32 @@ shared_examples "parallels desktop driver" do |options|
|
|
181
179
|
end
|
182
180
|
end
|
183
181
|
|
182
|
+
describe "read_guest_tools_iso_path" do
|
183
|
+
before do
|
184
|
+
subprocess.stub(:execute).
|
185
|
+
with("mdfind", /^kMDItemCFBundleIdentifier ==/, an_instance_of(Hash)).
|
186
|
+
and_return(subprocess_result(stdout: "/Applications/Parallels Desktop.app"))
|
187
|
+
end
|
188
|
+
|
189
|
+
it "returns a valid path to the ISO" do
|
190
|
+
File.stub(:exist?).and_return(true)
|
191
|
+
iso_path = subject.read_guest_tools_iso_path("linux")
|
192
|
+
iso_path.should be_kind_of(String)
|
193
|
+
iso_path.should match(/prl-tools-lin\.iso$/)
|
194
|
+
end
|
195
|
+
|
196
|
+
it "raises an exception if ISO file does not exists" do
|
197
|
+
File.stub(:exist?).and_return(false)
|
198
|
+
expect { subject.read_guest_tools_iso_path("windows") }.
|
199
|
+
to raise_error(VagrantPlugins::Parallels::Errors::ParallelsToolsIsoNotFound)
|
200
|
+
end
|
201
|
+
|
202
|
+
it "returns nil if guest OS is unsupported or invalid" do
|
203
|
+
subject.read_guest_tools_iso_path("").should be_nil
|
204
|
+
subject.read_guest_tools_iso_path("bolgenos").should be_nil
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
184
208
|
describe "read_mac_addresses" do
|
185
209
|
it "returns MAC addresses of all network interface cards" do
|
186
210
|
subject.read_mac_addresses.should be_kind_of(Hash)
|
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.0
|
4
|
+
version: 1.1.0
|
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-05-
|
12
|
+
date: 2014-05-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -98,26 +98,16 @@ files:
|
|
98
98
|
- config/i18n-tasks.yml.erb
|
99
99
|
- Gemfile
|
100
100
|
- lib/vagrant-parallels/action/boot.rb
|
101
|
-
- lib/vagrant-parallels/action/check_accessible.rb
|
102
|
-
- lib/vagrant-parallels/action/check_created.rb
|
103
|
-
- lib/vagrant-parallels/action/check_guest_tools.rb
|
104
|
-
- lib/vagrant-parallels/action/check_parallels.rb
|
105
|
-
- lib/vagrant-parallels/action/check_running.rb
|
106
101
|
- lib/vagrant-parallels/action/clear_network_interfaces.rb
|
107
102
|
- lib/vagrant-parallels/action/clear_shared_folders.rb
|
108
|
-
- lib/vagrant-parallels/action/created.rb
|
109
103
|
- lib/vagrant-parallels/action/customize.rb
|
110
104
|
- lib/vagrant-parallels/action/destroy.rb
|
111
105
|
- lib/vagrant-parallels/action/destroy_unused_network_interfaces.rb
|
112
106
|
- lib/vagrant-parallels/action/export.rb
|
113
107
|
- lib/vagrant-parallels/action/forced_halt.rb
|
108
|
+
- lib/vagrant-parallels/action/handle_guest_tools.rb
|
114
109
|
- lib/vagrant-parallels/action/import.rb
|
115
|
-
- lib/vagrant-parallels/action/
|
116
|
-
- lib/vagrant-parallels/action/is_suspended.rb
|
117
|
-
- lib/vagrant-parallels/action/message_already_running.rb
|
118
|
-
- lib/vagrant-parallels/action/message_not_created.rb
|
119
|
-
- lib/vagrant-parallels/action/message_not_running.rb
|
120
|
-
- lib/vagrant-parallels/action/message_will_not_destroy.rb
|
110
|
+
- lib/vagrant-parallels/action/is_driver_version.rb
|
121
111
|
- lib/vagrant-parallels/action/network.rb
|
122
112
|
- lib/vagrant-parallels/action/package.rb
|
123
113
|
- lib/vagrant-parallels/action/package_config_files.rb
|
@@ -139,6 +129,7 @@ files:
|
|
139
129
|
- lib/vagrant-parallels/driver/pd_9.rb
|
140
130
|
- lib/vagrant-parallels/errors.rb
|
141
131
|
- lib/vagrant-parallels/guest_cap/darwin/mount_parallels_shared_folder.rb
|
132
|
+
- lib/vagrant-parallels/guest_cap/linux/install_parallels_tools.rb
|
142
133
|
- lib/vagrant-parallels/guest_cap/linux/mount_parallels_shared_folder.rb
|
143
134
|
- lib/vagrant-parallels/plugin.rb
|
144
135
|
- lib/vagrant-parallels/provider.rb
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module VagrantPlugins
|
2
|
-
module Parallels
|
3
|
-
module Action
|
4
|
-
class CheckAccessible
|
5
|
-
def initialize(app, env)
|
6
|
-
@app = app
|
7
|
-
end
|
8
|
-
|
9
|
-
def call(env)
|
10
|
-
if env[:machine].state.id == :inaccessible
|
11
|
-
# The VM we are attempting to manipulate is inaccessible. This
|
12
|
-
# is a very bad situation and can only be fixed by the user. It
|
13
|
-
# also prohibits us from actually doing anything with the virtual
|
14
|
-
# machine, so we raise an error.
|
15
|
-
raise VagrantPlugins::Parallels::Errors::VMInaccessible
|
16
|
-
end
|
17
|
-
|
18
|
-
@app.call(env)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module VagrantPlugins
|
2
|
-
module Parallels
|
3
|
-
module Action
|
4
|
-
# This middleware checks that the VM is created, and raises an exception
|
5
|
-
# if it is not, notifying the user that creation is required.
|
6
|
-
class CheckCreated
|
7
|
-
def initialize(app, env)
|
8
|
-
@app = app
|
9
|
-
end
|
10
|
-
|
11
|
-
def call(env)
|
12
|
-
if env[:machine].state.id == :not_created
|
13
|
-
raise Vagrant::Errors::VMNotCreatedError
|
14
|
-
end
|
15
|
-
|
16
|
-
@app.call(env)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|