diff --git a/pkg/drivers/kic/oci/types.go b/pkg/drivers/kic/oci/types.go index 8c43ce7d8b1cae1675a16f3a4dad0149331c4a3d..e85c821eec540af49fe1153391e7d220a48124bb 100644 --- a/pkg/drivers/kic/oci/types.go +++ b/pkg/drivers/kic/oci/types.go @@ -31,6 +31,8 @@ const ( nodeRoleLabelKey = "role.minikube.sigs.k8s.io" // CreatedByLabelKey is applied to any container/volume that is created by minikube created_by.minikube.sigs.k8s.io=true CreatedByLabelKey = "created_by.minikube.sigs.k8s.io" + // ShutDownCmd is the command halt and stop the container + ShutDownCmd = "sudo init 0" ) // CreateParams are parameters needed to create a container diff --git a/pkg/minikube/machine/delete.go b/pkg/minikube/machine/delete.go index 2132d167378b67b8931bc929e32d9719efa6d4e1..08e668f916e5d628839c134c125362bf151115ff 100644 --- a/pkg/minikube/machine/delete.go +++ b/pkg/minikube/machine/delete.go @@ -77,8 +77,8 @@ func DeleteHost(api libmachine.API, machineName string) error { return mcnerror.ErrHostDoesNotExist{Name: machineName} } - // Hyper-V requires special care to avoid ACPI and file locking issues - if host.Driver.DriverName() == driver.HyperV { + // some drivers need manual shut down before delete to avoid getting stuck. + if driver.NeedsShutdown(host.Driver.DriverName()) { if err := StopHost(api, machineName); err != nil { glog.Warningf("stop host: %v", err) } diff --git a/pkg/minikube/machine/stop.go b/pkg/minikube/machine/stop.go index dfd0061e454c0ccce37618f590497c26de6d490d..a01accdb1e50bfaa6dc82d7a4a16b422ef7e3c21 100644 --- a/pkg/minikube/machine/stop.go +++ b/pkg/minikube/machine/stop.go @@ -25,6 +25,7 @@ import ( "github.com/docker/machine/libmachine/state" "github.com/golang/glog" "github.com/pkg/errors" + "k8s.io/minikube/pkg/drivers/kic/oci" "k8s.io/minikube/pkg/minikube/driver" "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/util/retry" @@ -78,8 +79,13 @@ func trySSHPowerOff(h *host.Host) error { } out.T(out.Shutdown, `Powering off "{{.profile_name}}" via SSH ...`, out.V{"profile_name": h.Name}) - out, err := h.RunSSHCommand("sudo poweroff") - // poweroff always results in an error, since the host disconnects. - glog.Infof("poweroff result: out=%s, err=%v", out, err) + if driver.IsKIC(h.DriverName) { + out, err := h.RunSSHCommand(oci.ShutDownCmd) + glog.Infof("shutdown cmd %q result: out=%s, err=%v", oci.ShutDownCmd, out, err) + } else { + out, err := h.RunSSHCommand("sudo poweroff") + // poweroff always results in an error, since the host disconnects. + glog.Infof("poweroff result: out=%s, err=%v", out, err) + } return nil }