Skip to content

Commit 4197935

Browse files
committed
Show remote host info and proper progress
1 parent 55e8e33 commit 4197935

File tree

7 files changed

+109
-6
lines changed

7 files changed

+109
-6
lines changed

cmd/minikube/cmd/start.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -812,7 +812,7 @@ func validateUser(drvName string) {
812812

813813
// memoryLimits returns the amount of memory allocated to the system and hypervisor, the return value is in MiB
814814
func memoryLimits(drvName string) (int, int, error) {
815-
info, cpuErr, memErr, diskErr := machine.CachedHostInfo()
815+
info, cpuErr, memErr, diskErr := machine.LocalHostInfo()
816816
if cpuErr != nil {
817817
klog.Warningf("could not get system cpu info while verifying memory limits, which might be okay: %v", cpuErr)
818818
}

pkg/minikube/machine/info.go

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ package machine
1919
import (
2020
"io/ioutil"
2121
"os/exec"
22+
"strconv"
23+
"strings"
2224

2325
"github.com/docker/machine/libmachine/provision"
2426
"github.com/shirou/gopsutil/cpu"
@@ -39,8 +41,8 @@ type HostInfo struct {
3941
DiskSize int64
4042
}
4143

42-
// CachedHostInfo returns system information such as memory,CPU, DiskSize
43-
func CachedHostInfo() (*HostInfo, error, error, error) {
44+
// LocalHostInfo returns system information such as memory,CPU, DiskSize
45+
func LocalHostInfo() (*HostInfo, error, error, error) {
4446
var cpuErr, memErr, diskErr error
4547
i, cpuErr := cachedCPUInfo()
4648
if cpuErr != nil {
@@ -63,6 +65,43 @@ func CachedHostInfo() (*HostInfo, error, error, error) {
6365
return &info, cpuErr, memErr, diskErr
6466
}
6567

68+
// RemoteHostInfo returns system information such as memory,CPU, DiskSize
69+
func RemoteHostInfo(r command.Runner) (*HostInfo, error, error, error) {
70+
rr, cpuErr := r.RunCmd(exec.Command("nproc"))
71+
if cpuErr != nil {
72+
klog.Warningf("Unable to get CPU info: %v", cpuErr)
73+
}
74+
nproc := rr.Stdout.String()
75+
ncpus, err := strconv.Atoi(strings.TrimSpace(nproc))
76+
if err != nil {
77+
klog.Warningf("Failed to parse CPU info: %v", err)
78+
}
79+
rr, memErr := r.RunCmd(exec.Command("free", "-m"))
80+
if memErr != nil {
81+
klog.Warningf("Unable to get mem info: %v", memErr)
82+
}
83+
free := rr.Stdout.String()
84+
memory, err := util.ParseMemFree(free)
85+
if err != nil {
86+
klog.Warningf("Unable to parse mem info: %v", err)
87+
}
88+
rr, diskErr := r.RunCmd(exec.Command("df", "-m"))
89+
if diskErr != nil {
90+
klog.Warningf("Unable to get disk info: %v", diskErr)
91+
}
92+
df := rr.Stdout.String()
93+
disksize, err := util.ParseDiskFree(df)
94+
if err != nil {
95+
klog.Warningf("Unable to parse disk info: %v", err)
96+
}
97+
98+
var info HostInfo
99+
info.CPUs = ncpus
100+
info.Memory = memory
101+
info.DiskSize = disksize
102+
return &info, cpuErr, memErr, diskErr
103+
}
104+
66105
// showLocalOsRelease shows systemd information about the current linux distribution, on the local host
67106
func showLocalOsRelease() {
68107
osReleaseOut, err := ioutil.ReadFile("/etc/os-release")

pkg/minikube/machine/start.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,9 @@ func createHost(api libmachine.API, cfg *config.ClusterConfig, n *config.Node) (
136136
See https://minikube.sigs.k8s.io/docs/reference/drivers/vmware/ for more information.
137137
To disable this message, run [minikube config set ShowDriverDeprecationNotification false]`)
138138
}
139-
showHostInfo(*cfg)
139+
if cfg.Driver != driver.Generic {
140+
showHostInfo(nil, *cfg)
141+
}
140142
def := registry.Driver(cfg.Driver)
141143
if def.Empty() {
142144
return nil, fmt.Errorf("unsupported/missing driver: %s", cfg.Driver)
@@ -170,6 +172,9 @@ func createHost(api libmachine.API, cfg *config.ClusterConfig, n *config.Node) (
170172
return nil, errors.Wrap(err, "creating host")
171173
}
172174
klog.Infof("duration metric: libmachine.API.Create for %q took %s", cfg.Name, time.Since(cstart))
175+
if cfg.Driver == driver.Generic {
176+
showHostInfo(h, *cfg)
177+
}
173178

174179
if err := postStartSetup(h, *cfg); err != nil {
175180
return h, errors.Wrap(err, "post-start")
@@ -321,16 +326,29 @@ func acquireMachinesLock(name string, drv string) (mutex.Releaser, error) {
321326
}
322327

323328
// showHostInfo shows host information
324-
func showHostInfo(cfg config.ClusterConfig) {
329+
func showHostInfo(h *host.Host, cfg config.ClusterConfig) {
325330
machineType := driver.MachineType(cfg.Driver)
326331
if driver.BareMetal(cfg.Driver) {
327-
info, cpuErr, memErr, DiskErr := CachedHostInfo()
332+
info, cpuErr, memErr, DiskErr := LocalHostInfo()
328333
if cpuErr == nil && memErr == nil && DiskErr == nil {
329334
register.Reg.SetStep(register.RunningLocalhost)
330335
out.T(style.StartingNone, "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...", out.V{"number_of_cpus": info.CPUs, "memory_size": info.Memory, "disk_size": info.DiskSize})
331336
}
332337
return
333338
}
339+
if cfg.Driver == driver.Generic {
340+
r, err := CommandRunner(h)
341+
if err != nil {
342+
klog.Warningf("error getting command runner: %v", err)
343+
return
344+
}
345+
info, cpuErr, memErr, DiskErr := RemoteHostInfo(r)
346+
if cpuErr == nil && memErr == nil && DiskErr == nil {
347+
register.Reg.SetStep(register.RunningRemotely)
348+
out.T(style.StartingGeneric, "Running remotely (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...", out.V{"number_of_cpus": info.CPUs, "memory_size": info.Memory, "disk_size": info.DiskSize})
349+
}
350+
return
351+
}
334352
if driver.IsKIC(cfg.Driver) { // TODO:medyagh add free disk space on docker machine
335353
register.Reg.SetStep(register.CreatingContainer)
336354
out.T(style.StartingVM, "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB) ...", out.V{"driver_name": cfg.Driver, "number_of_cpus": cfg.CPUs, "memory_size": cfg.Memory, "machine_type": machineType})

pkg/minikube/out/register/register.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const (
2929
DownloadingArtifacts RegStep = "Downloading Artifacts"
3030
StartingNode RegStep = "Starting Node"
3131
RunningLocalhost RegStep = "Running on Localhost"
32+
RunningRemotely RegStep = "Running Remotely"
3233
LocalOSRelease RegStep = "Local OS Release"
3334
CreatingContainer RegStep = "Creating Container"
3435
CreatingVM RegStep = "Creating VM"
@@ -71,6 +72,7 @@ func init() {
7172
LocalOSRelease,
7273
CreatingContainer,
7374
CreatingVM,
75+
RunningRemotely,
7476
PreparingKubernetes,
7577
ConfiguringLHEnv,
7678
VerifyingKubernetes,

pkg/minikube/style/style.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ var Config = map[Enum]Options{
122122
Resetting: {Prefix: "🔄 "},
123123
Shutdown: {Prefix: "🛑 "},
124124
StartingNone: {Prefix: "🤹 "},
125+
StartingGeneric: {Prefix: "🔗 "},
125126
StartingVM: {Prefix: "🔥 "},
126127
Tip: {Prefix: "💡 "},
127128
Unmount: {Prefix: "🔥 "},

pkg/minikube/style/style_enum.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ const (
8181
Shutdown
8282
Sparkle
8383
StartingNone
84+
StartingGeneric
8485
StartingVM
8586
Stopped
8687
Stopping

pkg/util/utils.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"os/user"
2323
"path/filepath"
2424
"strconv"
25+
"strings"
2526

2627
"github.com/blang/semver"
2728
units "github.com/docker/go-units"
@@ -62,6 +63,47 @@ func ConvertUnsignedBytesToMB(byteSize uint64) int64 {
6263
return int64(byteSize / units.MiB)
6364
}
6465

66+
// ParseMemFree parses the output of the `free -m` command
67+
func ParseMemFree(out string) (int64, error) {
68+
// total used free shared buff/cache available
69+
//Mem: 1987 706 194 1 1086 1173
70+
//Swap: 0 0 0
71+
outlines := strings.Split(out, "\n")
72+
l := len(outlines)
73+
for _, line := range outlines[1 : l-1] {
74+
parsedLine := strings.Fields(line)
75+
t, err := strconv.ParseInt(parsedLine[1], 10, 64)
76+
if err != nil {
77+
return 0, err
78+
}
79+
m := strings.Trim(parsedLine[0], ":")
80+
if m == "Mem" {
81+
return t, nil
82+
}
83+
}
84+
return 0, nil
85+
}
86+
87+
// ParseDiskFree parses the output of the `df -m` command
88+
func ParseDiskFree(out string) (int64, error) {
89+
// Filesystem 1M-blocks Used Available Use% Mounted on
90+
// /dev/sda1 39643 3705 35922 10% /
91+
outlines := strings.Split(out, "\n")
92+
l := len(outlines)
93+
for _, line := range outlines[1 : l-1] {
94+
parsedLine := strings.Fields(line)
95+
t, err := strconv.ParseInt(parsedLine[1], 10, 64)
96+
if err != nil {
97+
return 0, err
98+
}
99+
m := parsedLine[5]
100+
if m == "/" {
101+
return t, nil
102+
}
103+
}
104+
return 0, nil
105+
}
106+
65107
// GetBinaryDownloadURL returns a suitable URL for the platform
66108
func GetBinaryDownloadURL(version, platform string) string {
67109
switch platform {

0 commit comments

Comments
 (0)