@@ -228,21 +228,22 @@ func adjustGuestClock(h hostRunner, t time.Time) error {
228
228
}
229
229
230
230
// trySSHPowerOff runs the poweroff command on the guest VM to speed up deletion
231
- func trySSHPowerOff (h * host.Host ) {
231
+ func trySSHPowerOff (h * host.Host ) error {
232
232
s , err := h .Driver .GetState ()
233
233
if err != nil {
234
234
glog .Warningf ("unable to get state: %v" , err )
235
- return
235
+ return err
236
236
}
237
237
if s != state .Running {
238
238
glog .Infof ("host is in state %s" , s )
239
- return
239
+ return nil
240
240
}
241
241
242
242
out .T (out .Shutdown , `Powering off "{{.profile_name}}" via SSH ...` , out.V {"profile_name" : cfg .GetMachineName ()})
243
243
out , err := h .RunSSHCommand ("sudo poweroff" )
244
244
// poweroff always results in an error, since the host disconnects.
245
245
glog .Infof ("poweroff result: out=%s, err=%v" , out , err )
246
+ return nil
246
247
}
247
248
248
249
// StopHost stops the host VM, saving state to disk.
@@ -251,7 +252,15 @@ func StopHost(api libmachine.API) error {
251
252
if err != nil {
252
253
return errors .Wrapf (err , "load" )
253
254
}
255
+
254
256
out .T (out .Stopping , `Stopping "{{.profile_name}}" in {{.driver_name}} ...` , out.V {"profile_name" : cfg .GetMachineName (), "driver_name" : host .DriverName })
257
+ if host .DriverName == constants .DriverHyperv {
258
+ glog .Infof ("As there are issues with stopping Hyper-V VMs using API, trying to shut down using SSH" )
259
+ if err := trySSHPowerOff (host ); err != nil {
260
+ return errors .Wrap (err , "ssh power off" )
261
+ }
262
+ }
263
+
255
264
if err := host .Stop (); err != nil {
256
265
alreadyInStateError , ok := err .(mcnerror.ErrHostAlreadyInState )
257
266
if ok && alreadyInStateError .State == state .Stopped {
@@ -270,7 +279,9 @@ func DeleteHost(api libmachine.API) error {
270
279
}
271
280
// This is slow if SSH is not responding, but HyperV hangs otherwise, See issue #2914
272
281
if host .Driver .DriverName () == constants .DriverHyperv {
273
- trySSHPowerOff (host )
282
+ if err := trySSHPowerOff (host ); err != nil {
283
+ glog .Infof ("Unable to power off minikube because the host was not found." )
284
+ }
274
285
}
275
286
276
287
out .T (out .DeletingHost , `Deleting "{{.profile_name}}" in {{.driver_name}} ...` , out.V {"profile_name" : cfg .GetMachineName (), "driver_name" : host .DriverName })
0 commit comments