diff --git a/pkg/minikube/reason/reason.go b/pkg/minikube/reason/reason.go index f90c1d98d86d56bc2a17fff555455c44c253c4fb..4f0815c6e1426f6524b36dc79742e7d52912cd0a 100644 --- a/pkg/minikube/reason/reason.go +++ b/pkg/minikube/reason/reason.go @@ -231,6 +231,7 @@ var ( DrvNotDetected = Kind{ID: "DRV_NOT_DETECTED", ExitCode: ExDriverNotFound} DrvAsRoot = Kind{ID: "DRV_AS_ROOT", ExitCode: ExDriverPermission} DrvNeedsRoot = Kind{ID: "DRV_NEEDS_ROOT", ExitCode: ExDriverPermission} + DrvNeedsAdministrator = Kind{ID: "DRV_NEEDS_ADMINISTRATOR", ExitCode: ExDriverPermission} GuestCacheLoad = Kind{ID: "GUEST_CACHE_LOAD", ExitCode: ExGuestError} GuestCert = Kind{ID: "GUEST_CERT", ExitCode: ExGuestError} diff --git a/pkg/minikube/registry/drvs/hyperv/hyperv.go b/pkg/minikube/registry/drvs/hyperv/hyperv.go index c12f2d826dd0e9d00252eb5dc3602def487af96d..3c6b5d207d77db7e5659b2711b0037adb2a07b9f 100644 --- a/pkg/minikube/registry/drvs/hyperv/hyperv.go +++ b/pkg/minikube/registry/drvs/hyperv/hyperv.go @@ -34,6 +34,8 @@ import ( "k8s.io/minikube/pkg/minikube/driver" "k8s.io/minikube/pkg/minikube/localpath" "k8s.io/minikube/pkg/minikube/registry" + "k8s.io/minikube/pkg/minikube/exit" + "k8s.io/minikube/pkg/minikube/reason" ) const ( @@ -105,5 +107,18 @@ func status() registry.State { return registry.State{Installed: false, Running: false, Error: errorMessage, Fix: fixMessage, Doc: docURL} } + // Ensure user is either a Windows Administrator or a Hyper-V Administrator. + adminCheckCmd := exec.CommandContext(ctx, path, `@([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")`) + adminCheckOut, _ := adminCheckCmd.CombinedOutput() + + hypervAdminCheckCmd := exec.CommandContext(ctx, path, `@([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(([System.Security.Principal.SecurityIdentifier]::new("S-1-5-32-578")))`) + hypervAdminCheckOut, _ := hypervAdminCheckCmd.CombinedOutput() + + + if (strings.TrimSpace(string(adminCheckOut)) != "True") && (strings.TrimSpace(string(hypervAdminCheckOut)) != "True") { + exit.Error(reason.DrvNeedsAdministrator,"", errors.New("Hyper-v commands have to be run as an Administrator")) + } + + return registry.State{Installed: true, Healthy: true} -} +} \ No newline at end of file