vagrant-parallels 1.0.9.rc1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vagrant-parallels/action.rb +121 -122
  3. data/lib/vagrant-parallels/action/customize.rb +2 -3
  4. data/lib/vagrant-parallels/action/handle_guest_tools.rb +51 -0
  5. data/lib/vagrant-parallels/action/import.rb +1 -1
  6. data/lib/vagrant-parallels/action/is_driver_version.rb +28 -0
  7. data/lib/vagrant-parallels/action/set_power_consumption.rb +2 -6
  8. data/lib/vagrant-parallels/config.rb +6 -0
  9. data/lib/vagrant-parallels/driver/base.rb +42 -57
  10. data/lib/vagrant-parallels/driver/meta.rb +4 -5
  11. data/lib/vagrant-parallels/driver/pd_8.rb +80 -50
  12. data/lib/vagrant-parallels/driver/pd_9.rb +7 -7
  13. data/lib/vagrant-parallels/errors.rb +8 -4
  14. data/lib/vagrant-parallels/guest_cap/linux/install_parallels_tools.rb +53 -0
  15. data/lib/vagrant-parallels/plugin.rb +7 -2
  16. data/lib/vagrant-parallels/version.rb +1 -1
  17. data/locales/en.yml +34 -29
  18. data/test/unit/driver/pd_8_test.rb +3 -0
  19. data/test/unit/driver/pd_9_test.rb +3 -0
  20. data/test/unit/support/shared/pd_driver_examples.rb +33 -9
  21. metadata +5 -14
  22. data/lib/vagrant-parallels/action/check_accessible.rb +0 -23
  23. data/lib/vagrant-parallels/action/check_created.rb +0 -21
  24. data/lib/vagrant-parallels/action/check_guest_tools.rb +0 -37
  25. data/lib/vagrant-parallels/action/check_parallels.rb +0 -22
  26. data/lib/vagrant-parallels/action/check_running.rb +0 -21
  27. data/lib/vagrant-parallels/action/created.rb +0 -20
  28. data/lib/vagrant-parallels/action/is_running.rb +0 -20
  29. data/lib/vagrant-parallels/action/is_suspended.rb +0 -21
  30. data/lib/vagrant-parallels/action/message_already_running.rb +0 -16
  31. data/lib/vagrant-parallels/action/message_not_created.rb +0 -16
  32. data/lib/vagrant-parallels/action/message_not_running.rb +0 -16
  33. data/lib/vagrant-parallels/action/message_will_not_destroy.rb +0 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a8ea354f8e68e8f1aaf7818f93d2dca3443810dd
4
- data.tar.gz: 2233c2829d52b81c756887386609777cae1f9b20
3
+ metadata.gz: 7cc269a4cbf2360003f371aca48b009baa72df2f
4
+ data.tar.gz: 7210ed53e9d14ad25802f462c4a64b29496e23a6
5
5
  SHA512:
6
- metadata.gz: f9d87dd9bb9b2d54ca7cf823b401afb7d6e2c613a545c6b5747c32d90f758a913a06886c22f589ddd033499fda31837e510e44c3a3f799d6de3b73907f39e601
7
- data.tar.gz: ba152304d98bc5c2f1212783a1f50fffff9ba4f21b6ec9ea2ba2c235c977804614e27c7ac35c449d09a3c69dd9a35d475ef141a136b3e5af39a3b6a8b1f56350
6
+ metadata.gz: 99a2c50f43cf9a0ff5505a17a928f9090b2f35b612473d69cf24e86322929f65deeda05c74b3b1bdcf2ac8a2173ff34598a077b154d91f6d2cd49bd701fd4f64
7
+ data.tar.gz: 1960c6a9e1cf96012aefeb3641a725f63cba7374131bfff6ebf405578c7b800809a8841597cece62bd77158741a52e3e5b99df459dfa0d1f42ddbaef15b99743
@@ -11,28 +11,25 @@ module VagrantPlugins
11
11
  # a bootup (i.e. not saved).
12
12
  def self.action_boot
13
13
  Vagrant::Action::Builder.new.tap do |b|
14
- b.use CheckAccessible
15
- b.use SetPowerConsumption
16
14
  b.use SetName
17
- # b.use ClearForwardedPorts
18
15
  b.use Provision
19
- b.use EnvSet, :port_collision_repair => true
20
- # b.use PrepareForwardedPortCollisionParams
21
- # b.use HandleForwardedPortCollisions
22
16
  b.use PrepareNFSValidIds
23
17
  b.use SyncedFolderCleanup
24
18
  b.use SyncedFolders
25
19
  b.use PrepareNFSSettings
26
20
  b.use Network
27
21
  b.use ClearNetworkInterfaces
28
- # b.use ForwardPorts
29
22
  b.use SetHostname
30
- # b.use SaneDefaults
23
+ b.use Call, IsDriverVersion, '>= 9' do |env1, b1|
24
+ if env1[:result]
25
+ b1.use SetPowerConsumption
26
+ end
27
+ end
31
28
  b.use Customize, "pre-boot"
32
29
  b.use Boot
33
30
  b.use Customize, "post-boot"
34
31
  b.use WaitForCommunicator, [:starting, :running]
35
- b.use CheckGuestTools
32
+ b.use HandleGuestTools
36
33
  end
37
34
  end
38
35
 
@@ -40,26 +37,27 @@ module VagrantPlugins
40
37
  # freeing the resources of the underlying virtual machine.
41
38
  def self.action_destroy
42
39
  Vagrant::Action::Builder.new.tap do |b|
43
- b.use CheckParallels
44
- b.use Call, Created do |env1, b2|
45
- if !env1[:result]
46
- b2.use MessageNotCreated
40
+ b.use ConfigValidate
41
+ b.use Call, IsState, :not_created do |env1, b1|
42
+ if env1[:result]
43
+ b1.use Message, I18n.t("vagrant.commands.common.vm_not_created")
47
44
  next
48
45
  end
49
46
 
50
- b2.use Call, DestroyConfirm do |env2, b3|
51
- if env2[:result]
52
- b3.use CheckAccessible
53
- b3.use EnvSet, :force_halt => true
54
- b3.use action_halt
55
- b3.use Destroy
56
- b3.use DestroyUnusedNetworkInterfaces
57
- b3.use ProvisionerCleanup
58
- b3.use PrepareNFSValidIds
59
- b3.use SyncedFolderCleanup
60
- else
61
- b3.use MessageWillNotDestroy
47
+ b1.use Call, DestroyConfirm do |env2, b2|
48
+ if !env2[:result]
49
+ b2.use Message, I18n.t("vagrant.commands.destroy.will_not_destroy",
50
+ :name => env2[:machine].name)
51
+ next
62
52
  end
53
+
54
+ b2.use EnvSet, :force_halt => true
55
+ b2.use action_halt
56
+ b2.use Destroy
57
+ b2.use DestroyUnusedNetworkInterfaces
58
+ b2.use ProvisionerCleanup
59
+ b2.use PrepareNFSValidIds
60
+ b2.use SyncedFolderCleanup
63
61
  end
64
62
  end
65
63
  end
@@ -69,23 +67,23 @@ module VagrantPlugins
69
67
  # the virtual machine, gracefully or by force.
70
68
  def self.action_halt
71
69
  Vagrant::Action::Builder.new.tap do |b|
72
- b.use CheckParallels
73
- b.use Call, Created do |env, b2|
74
- if env[:result]
75
- b2.use CheckAccessible
70
+ b.use ConfigValidate
71
+ b.use Call, IsState, :not_created do |env1, b1|
72
+ if env1[:result]
73
+ b1.use Message, I18n.t("vagrant.commands.common.vm_not_created")
74
+ next
75
+ end
76
76
 
77
- b2.use Call, IsSuspended do |env2, b3|
78
- next if !env2[:result]
79
- b3.use Resume
77
+ b1.use Call, IsState, :suspended do |env2, b2|
78
+ if env2[:result]
79
+ b2.use Resume
80
80
  end
81
+ end
81
82
 
82
- b2.use Call, GracefulHalt, :stopped, :running do |env2, b3|
83
- if !env2[:result]
84
- b3.use ForcedHalt
85
- end
83
+ b1.use Call, GracefulHalt, :stopped, :running do |env2, b2|
84
+ if !env2[:result]
85
+ b2.use ForcedHalt
86
86
  end
87
- else
88
- b2.use MessageNotCreated
89
87
  end
90
88
  end
91
89
  end
@@ -94,22 +92,20 @@ module VagrantPlugins
94
92
  # This action packages the virtual machine into a single box file.
95
93
  def self.action_package
96
94
  Vagrant::Action::Builder.new.tap do |b|
97
- b.use CheckParallels
98
- b.use Call, Created do |env1, b2|
99
- if !env1[:result]
100
- b2.use MessageNotCreated
95
+ b.use ConfigValidate
96
+ b.use Call, IsState, :not_created do |env1, b1|
97
+ if env1[:result]
98
+ b1.use Message, I18n.t("vagrant.commands.common.vm_not_created")
101
99
  next
102
100
  end
103
101
 
104
- b2.use SetupPackageFiles
105
- b2.use CheckAccessible
106
- b2.use action_halt
107
- #b2.use ClearForwardedPorts
108
- b2.use PrepareNFSValidIds
109
- b2.use SyncedFolderCleanup
110
- b2.use Package
111
- b2.use Export
112
- b2.use PackageConfigFiles
102
+ b1.use SetupPackageFiles
103
+ b1.use action_halt
104
+ b1.use PrepareNFSValidIds
105
+ b1.use SyncedFolderCleanup
106
+ b1.use Package
107
+ b1.use Export
108
+ b1.use PackageConfigFiles
113
109
  end
114
110
  end
115
111
  end
@@ -117,22 +113,20 @@ module VagrantPlugins
117
113
  # This action just runs the provisioners on the machine.
118
114
  def self.action_provision
119
115
  Vagrant::Action::Builder.new.tap do |b|
120
- b.use CheckParallels
121
116
  b.use ConfigValidate
122
- b.use Call, Created do |env1, b2|
123
- if !env1[:result]
124
- b2.use MessageNotCreated
117
+ b.use Call, IsState, :not_created do |env1, b1|
118
+ if env1[:result]
119
+ b1.use Message, I18n.t("vagrant.commands.common.vm_not_created")
125
120
  next
126
121
  end
127
122
 
128
- b2.use Call, IsRunning do |env2, b3|
123
+ b1.use Call, IsState, :running do |env2, b2|
129
124
  if !env2[:result]
130
- b3.use MessageNotRunning
125
+ b2.use Message, I18n.t("vagrant.commands.common.vm_not_running")
131
126
  next
132
127
  end
133
128
 
134
- b3.use CheckAccessible
135
- b3.use Provision
129
+ b2.use Provision
136
130
  end
137
131
  end
138
132
  end
@@ -143,16 +137,15 @@ module VagrantPlugins
143
137
  # machine back up with the new configuration.
144
138
  def self.action_reload
145
139
  Vagrant::Action::Builder.new.tap do |b|
146
- b.use CheckParallels
147
- b.use Call, Created do |env1, b2|
148
- if !env1[:result]
149
- b2.use MessageNotCreated
140
+ b.use ConfigValidate
141
+ b.use Call, IsState, :not_created do |env1, b1|
142
+ if env1[:result]
143
+ b1.use Message, I18n.t("vagrant.commands.common.vm_not_created")
150
144
  next
151
145
  end
152
146
 
153
- b2.use ConfigValidate
154
- b2.use action_halt
155
- b2.use action_start
147
+ b1.use action_halt
148
+ b1.use action_start
156
149
  end
157
150
  end
158
151
  end
@@ -161,16 +154,15 @@ module VagrantPlugins
161
154
  # suspended machines.
162
155
  def self.action_resume
163
156
  Vagrant::Action::Builder.new.tap do |b|
164
- b.use CheckParallels
165
- b.use Call, Created do |env, b2|
166
- if env[:result]
167
- b2.use CheckAccessible
168
- b2.use EnvSet, :port_collision_repair => false
169
- b2.use Resume
170
- b2.use WaitForCommunicator, [:resuming, :running]
171
- else
172
- b2.use MessageNotCreated
157
+ b.use ConfigValidate
158
+ b.use Call, IsState, :not_created do |env1, b1|
159
+ if env1[:result]
160
+ b1.use Message, I18n.t("vagrant.commands.common.vm_not_created")
161
+ next
173
162
  end
163
+
164
+ b1.use Resume
165
+ b1.use WaitForCommunicator, [:resuming, :running]
174
166
  end
175
167
  end
176
168
  end
@@ -178,22 +170,44 @@ module VagrantPlugins
178
170
  # This is the action that will exec into an SSH shell.
179
171
  def self.action_ssh
180
172
  Vagrant::Action::Builder.new.tap do |b|
181
- b.use CheckParallels
182
- b.use CheckCreated
183
- b.use CheckAccessible
184
- b.use CheckRunning
185
- b.use SSHExec
173
+ b.use ConfigValidate
174
+ b.use Call, IsState, :not_created do |env1, b1|
175
+ if env1[:result]
176
+ b1.use Message, I18n.t("vagrant.commands.common.vm_not_created")
177
+ next
178
+ end
179
+
180
+ b1.use Call, IsState, :running do |env2, b2|
181
+ if !env2[:result]
182
+ b2.use Message, I18n.t("vagrant.commands.common.vm_not_running")
183
+ next
184
+ end
185
+
186
+ b2.use SSHExec
187
+ end
188
+ end
186
189
  end
187
190
  end
188
191
 
189
192
  # This is the action that will run a single SSH command.
190
193
  def self.action_ssh_run
191
194
  Vagrant::Action::Builder.new.tap do |b|
192
- b.use CheckParallels
193
- b.use CheckCreated
194
- b.use CheckAccessible
195
- b.use CheckRunning
196
- b.use SSHRun
195
+ b.use ConfigValidate
196
+ b.use Call, IsState, :not_created do |env1, b1|
197
+ if env1[:result]
198
+ b1.use Message, I18n.t("vagrant.commands.common.vm_not_created")
199
+ next
200
+ end
201
+
202
+ b1.use Call, IsState, :running do |env2, b2|
203
+ if !env2[:result]
204
+ b2.use Message, I18n.t("vagrant.commands.common.vm_not_running")
205
+ next
206
+ end
207
+
208
+ b2.use SSHRun
209
+ end
210
+ end
197
211
  end
198
212
  end
199
213
 
@@ -201,26 +215,24 @@ module VagrantPlugins
201
215
  # A precondition of this action is that the VM exists.
202
216
  def self.action_start
203
217
  Vagrant::Action::Builder.new.tap do |b|
204
- b.use CheckParallels
205
- b.use ConfigValidate
206
218
  b.use BoxCheckOutdated
207
- b.use Call, IsRunning do |env, b2|
219
+ b.use Call, IsState, :running do |env1, b1|
208
220
  # If the VM is running, then our work here is done, exit
209
- if env[:result]
210
- b2.use MessageAlreadyRunning
221
+ if env1[:result]
222
+ b1.use Message, I18n.t("vagrant_parallels.commands.common.vm_already_running")
211
223
  next
212
224
  end
213
225
 
214
- b2.use Call, IsSuspended do |env2, b3|
226
+ b1.use Call, IsState, :suspended do |env2, b2|
215
227
  if env2[:result]
216
228
  # The VM is suspended, so just resume it
217
- b3.use action_resume
229
+ b2.use action_resume
218
230
  next
219
231
  end
220
232
 
221
233
  # The VM is not saved, so we must have to boot it up
222
234
  # like normal. Boot!
223
- b3.use action_boot
235
+ b2.use action_boot
224
236
  end
225
237
  end
226
238
  end
@@ -230,14 +242,14 @@ module VagrantPlugins
230
242
  # the virtual machine.
231
243
  def self.action_suspend
232
244
  Vagrant::Action::Builder.new.tap do |b|
233
- b.use CheckParallels
234
- b.use Call, Created do |env, b2|
235
- if env[:result]
236
- b2.use CheckAccessible
237
- b2.use Suspend
238
- else
239
- b2.use MessageNotCreated
245
+ b.use ConfigValidate
246
+ b.use Call, IsState, :not_created do |env1, b1|
247
+ if env1[:result]
248
+ b1.use Message, I18n.t("vagrant.commands.common.vm_not_created")
249
+ next
240
250
  end
251
+
252
+ b1.use Suspend
241
253
  end
242
254
  end
243
255
  end
@@ -246,24 +258,21 @@ module VagrantPlugins
246
258
  # the box, configuring metadata, and booting.
247
259
  def self.action_up
248
260
  Vagrant::Action::Builder.new.tap do |b|
249
- b.use CheckParallels
250
-
251
261
  # Handle box_url downloading early so that if the Vagrantfile
252
262
  # references any files in the box or something it all just
253
263
  # works fine.
254
- b.use Call, Created do |env, b2|
255
- if !env[:result]
256
- b2.use HandleBox
264
+ b.use Call, IsState, :not_created do |env1, b1|
265
+ if env1[:result]
266
+ b1.use HandleBox
257
267
  end
258
268
  end
259
269
 
260
270
  b.use ConfigValidate
261
- b.use Call, Created do |env, b2|
271
+ b.use Call, IsState, :not_created do |env1, b1|
262
272
  # If the VM is NOT created yet, then do the setup steps
263
- if !env[:result]
264
- b2.use CheckAccessible
265
- b2.use Customize, "pre-import"
266
- b2.use Import
273
+ if env1[:result]
274
+ b1.use Customize, "pre-import"
275
+ b1.use Import
267
276
  end
268
277
  end
269
278
  b.use action_start
@@ -271,25 +280,15 @@ module VagrantPlugins
271
280
  end
272
281
 
273
282
  autoload :Boot, File.expand_path("../action/boot", __FILE__)
274
- autoload :CheckAccessible, File.expand_path("../action/check_accessible", __FILE__)
275
- autoload :CheckCreated, File.expand_path("../action/check_created", __FILE__)
276
- autoload :CheckGuestTools, File.expand_path("../action/check_guest_tools", __FILE__)
277
- autoload :CheckParallels, File.expand_path("../action/check_parallels", __FILE__)
278
- autoload :CheckRunning, File.expand_path("../action/check_running", __FILE__)
283
+ autoload :HandleGuestTools, File.expand_path("../action/handle_guest_tools", __FILE__)
279
284
  autoload :ClearNetworkInterfaces, File.expand_path("../action/clear_network_interfaces", __FILE__)
280
- autoload :Created, File.expand_path("../action/created", __FILE__)
281
285
  autoload :Customize, File.expand_path("../action/customize", __FILE__)
282
286
  autoload :Destroy, File.expand_path("../action/destroy", __FILE__)
283
287
  autoload :DestroyUnusedNetworkInterfaces, File.expand_path("../action/destroy_unused_network_interfaces", __FILE__)
284
288
  autoload :Export, File.expand_path("../action/export", __FILE__)
285
289
  autoload :ForcedHalt, File.expand_path("../action/forced_halt", __FILE__)
286
290
  autoload :Import, File.expand_path("../action/import", __FILE__)
287
- autoload :IsSuspended, File.expand_path("../action/is_suspended", __FILE__)
288
- autoload :IsRunning, File.expand_path("../action/is_running", __FILE__)
289
- autoload :MessageAlreadyRunning, File.expand_path("../action/message_already_running", __FILE__)
290
- autoload :MessageNotCreated, File.expand_path("../action/message_not_created", __FILE__)
291
- autoload :MessageNotRunning, File.expand_path("../action/message_not_running", __FILE__)
292
- autoload :MessageWillNotDestroy, File.expand_path("../action/message_will_not_destroy", __FILE__)
291
+ autoload :IsDriverVersion, File.expand_path("../action/is_driver_version", __FILE__)
293
292
  autoload :Network, File.expand_path("../action/network", __FILE__)
294
293
  autoload :Package, File.expand_path("../action/package", __FILE__)
295
294
  autoload :PackageConfigFiles, File.expand_path("../action/package_config_files", __FILE__)
@@ -26,9 +26,8 @@ module VagrantPlugins
26
26
  end
27
27
 
28
28
  begin
29
- env[:machine].provider.driver.execute_command(
30
- processed_command + [retryable: true])
31
- rescue VagrantPlugins::Parallels::Errors::PrlCtlError => e
29
+ env[:machine].provider.driver.execute_prlctl(*processed_command)
30
+ rescue VagrantPlugins::Parallels::Errors::ExecutionError => e
32
31
  raise Vagrant::Errors::VMCustomizationFailed, {
33
32
  :command => command,
34
33
  :error => e.inspect
@@ -0,0 +1,51 @@
1
+ module VagrantPlugins
2
+ module Parallels
3
+ module Action
4
+ class HandleGuestTools
5
+ def initialize(app, env)
6
+ @app = app
7
+ @logger = Log4r::Logger.new("vagrant::plugins::parallels::handle_guest_tools")
8
+ end
9
+
10
+ def call(env)
11
+ @machine = env[:machine]
12
+
13
+ if !@machine.provider_config.check_guest_tools
14
+ @logger.info("Not checking Parallels Tools because of configuration")
15
+ return @app.call(env)
16
+ end
17
+
18
+ env[:ui].output(I18n.t("vagrant_parallels.actions.vm.handle_guest_tools.checking"))
19
+
20
+ tools_state = @machine.provider.driver.read_guest_tools_state
21
+
22
+ if tools_state == :installed
23
+ @logger.info("The proper version of Parallels Tools is already installed")
24
+ return @app.call(env)
25
+ elsif tools_state == :outdated
26
+ env[:ui].warn(I18n.t("vagrant_parallels.actions.vm.handle_guest_tools.outdated"))
27
+ else
28
+ env[:ui].warn(I18n.t("vagrant_parallels.actions.vm.handle_guest_tools.not_detected"))
29
+ end
30
+
31
+ if !@machine.provider_config.update_guest_tools
32
+ @logger.info("Not updating Parallels Tools because of configuration")
33
+ return @app.call(env)
34
+ end
35
+
36
+ # Update/Install Parallels Tools
37
+ if @machine.guest.capability?(:install_parallels_tools)
38
+ env[:ui].output(I18n.t("vagrant_parallels.actions.vm.handle_guest_tools.installing"))
39
+ @machine.guest.capability(:install_parallels_tools)
40
+ else
41
+ env[:ui].warn(I18n.t("vagrant_parallels.actions.vm.handle_guest_tools.cant_install"))
42
+ end
43
+
44
+ # Continue
45
+ @app.call(env)
46
+ end
47
+
48
+ end
49
+ end
50
+ end
51
+ end