@@ -75,18 +75,26 @@ func DeleteHost(api libmachine.API, machineName string) error {
75
75
return mcnerror.ErrHostDoesNotExist {Name : machineName }
76
76
}
77
77
78
- // This is slow if SSH is not responding, but HyperV hangs otherwise, See issue #2914
78
+ // Hyper-V requires special care to avoid ACPI and file locking issues
79
79
if host .Driver .DriverName () == driver .HyperV {
80
- if err := trySSHPowerOff ( host ); err != nil {
81
- glog .Infof ( "Unable to power off minikube because the host was not found." )
80
+ if err := StopHost ( api , machineName ); err != nil {
81
+ glog .Warningf ( "stop host: %v" , err )
82
82
}
83
- out .T (out .DeletingHost , "Successfully powered off Hyper-V. minikube driver -- {{.driver}}" , out.V {"driver" : host .Driver .DriverName ()})
83
+ // Hack: give the Hyper-V VM more time to stop before deletion
84
+ time .Sleep (1 * time .Second )
84
85
}
85
86
86
87
out .T (out .DeletingHost , `Deleting "{{.profile_name}}" in {{.driver_name}} ...` , out.V {"profile_name" : machineName , "driver_name" : host .DriverName })
87
88
if err := host .Driver .Remove (); err != nil {
88
- return errors .Wrap (err , "host remove" )
89
+ glog .Warningf ("remove failed, will retry: %v" , err )
90
+ time .Sleep (2 * time .Second )
91
+
92
+ nerr := host .Driver .Remove ()
93
+ if nerr != nil {
94
+ return errors .Wrap (nerr , "host remove retry" )
95
+ }
89
96
}
97
+
90
98
if err := api .Remove (machineName ); err != nil {
91
99
return errors .Wrap (err , "api remove" )
92
100
}
0 commit comments