Skip to content

Commit

Permalink
Issue minishift#1247 Extend status command to provide more details
Browse files Browse the repository at this point in the history
  • Loading branch information
praveenkumar authored and anjannath committed Nov 6, 2017
1 parent f041860 commit 6253c5c
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 28 deletions.
9 changes: 3 additions & 6 deletions cmd/minishift/cmd/openshift/version.go
Expand Up @@ -21,10 +21,9 @@ import (
"os"

"github.com/docker/machine/libmachine"
"github.com/docker/machine/libmachine/provision"
"github.com/minishift/minishift/pkg/minikube/cluster"
"github.com/minishift/minishift/pkg/minikube/constants"
"github.com/minishift/minishift/pkg/minishift/docker"
openshiftVersions "github.com/minishift/minishift/pkg/minishift/openshift/version"
"github.com/minishift/minishift/pkg/util/os/atexit"
"github.com/spf13/cobra"
)
Expand All @@ -45,11 +44,9 @@ func runVersion(cmd *cobra.Command, args []string) {
if err != nil {
atexit.ExitWithMessage(1, nonExistentMachineError)
}
sshCommander := provision.GenericSSHCommander{Driver: host.Driver}
dockerCommander := docker.NewVmDockerCommander(sshCommander)
version, err := dockerCommander.Exec(" ", "origin", "openshift", "version")
version, err := openshiftVersions.GetOpenshiftVersion(host)
if err != nil {
atexit.ExitWithMessage(1, fmt.Sprintf("Error restarting the OpenShift cluster: %s", err.Error()))
atexit.ExitWithMessage(1, fmt.Sprintf("Error getting the OpenShift cluster version: %s", err.Error()))
}
fmt.Fprintln(os.Stdout, version)
}
Expand Down
14 changes: 8 additions & 6 deletions cmd/minishift/cmd/start_preflight.go
Expand Up @@ -335,7 +335,7 @@ func checkStorageMounted(driver drivers.Driver) bool {
// checkStorageUsage checks if the peristent storage volume has enough storage
// space available.
func checkStorageUsage(driver drivers.Driver) bool {
usedPercentage := getDiskUsage(driver, StorageDisk)
_, usedPercentage := getDiskUsage(driver, StorageDisk)
fmt.Printf("%s used ", usedPercentage)
usage, err := strconv.Atoi(stringUtils.GetOnlyNumbers(usedPercentage))
if err != nil {
Expand All @@ -352,18 +352,20 @@ func checkStorageUsage(driver drivers.Driver) bool {
}

// isMounted checks returns usage of mountpoint known to the VM instance
func getDiskUsage(driver drivers.Driver, mountpoint string) string {
func getDiskUsage(driver drivers.Driver, mountpoint string) (string, string) {
cmd := fmt.Sprintf(
"df -h %s | awk 'FNR > 1 {print $5}'",
"df -h %s | awk 'FNR > 1 {print $2,$5}'",
mountpoint)

out, err := drivers.RunSSHCommandFromDriver(driver, cmd)

if err != nil {
return "ERR"
return "", "ERR"
}

return strings.Trim(out, "\n")
diskDetails := strings.Split(strings.Trim(out, "\n"), " ")
diskSize := diskDetails[0]
diskUsage := diskDetails[1]
return diskSize, diskUsage
}

// isMounted checks if mountpoint is mounted to the VM instance
Expand Down
67 changes: 60 additions & 7 deletions cmd/minishift/cmd/status.go
Expand Up @@ -19,29 +19,82 @@ package cmd
import (
"fmt"
"os"
"strings"
"text/template"

"github.com/docker/machine/libmachine"
"github.com/spf13/cobra"

"github.com/docker/machine/libmachine/state"
"github.com/minishift/minishift/pkg/minikube/cluster"
"github.com/minishift/minishift/pkg/minikube/constants"
openshiftVersion "github.com/minishift/minishift/pkg/minishift/openshift/version"
profileActions "github.com/minishift/minishift/pkg/minishift/profile"
"github.com/minishift/minishift/pkg/util/os/atexit"
"github.com/spf13/cobra"
)

var statusFormat = `Minishift: {{.MinishiftStatus}}
Profile: {{.ProfileName}}
OpenShift: {{.ClusterStatus}}
DiskUsage: {{.DiskUsage}}
`

type Status struct {
MinishiftStatus string
ProfileName string
ClusterStatus string
DiskUsage string
}

// statusCmd represents the status command
var statusCmd = &cobra.Command{
Use: "status",
Short: "Gets the status of the local OpenShift cluster.",
Long: `Gets the status of the local OpenShift cluster.`,
Run: func(cmd *cobra.Command, args []string) {
api := libmachine.NewClient(constants.Minipath, constants.MakeMiniPath("certs"))
defer api.Close()
Run: runStatus,
}

func runStatus(cmd *cobra.Command, args []string) {
api := libmachine.NewClient(constants.Minipath, constants.MakeMiniPath("certs"))
defer api.Close()

host, err := api.Load(constants.MachineName)
if err != nil {
s, err := cluster.GetHostStatus(api)
if err != nil {
atexit.ExitWithMessage(1, fmt.Sprintf("Error getting cluster status: %s", err.Error()))
}
fmt.Fprintln(os.Stdout, s)
},
atexit.ExitWithMessage(0, s)
}

openshiftStatus := "Stopped"
diskUsage := "Unknown"
profileName := profileActions.GetActiveProfile()

vmStatus, err := cluster.GetHostStatus(api)
if err != nil {
atexit.ExitWithMessage(1, fmt.Sprintf("Error getting cluster status: %s", err.Error()))
}

if vmStatus == state.Running.String() {
openshiftVersion, err := openshiftVersion.GetOpenshiftVersion(host)
if err == nil {
openshiftStatus = fmt.Sprintf("Running (%s)", strings.Split(openshiftVersion, "\n")[0])
}

diskSize, diskUse := getDiskUsage(host.Driver, StorageDisk)
diskUsage = fmt.Sprintf("%s of %s", diskUse, diskSize)
}

status := Status{vmStatus, profileName, openshiftStatus, diskUsage}

tmpl, err := template.New("status").Parse(statusFormat)
if err != nil {
atexit.ExitWithMessage(1, fmt.Sprintf("Error creating status template: %s", err.Error()))
}
err = tmpl.Execute(os.Stdout, status)
if err != nil {
atexit.ExitWithMessage(1, fmt.Sprintf("Error executing status template:: %s", err.Error()))
}
}

func init() {
Expand Down
10 changes: 10 additions & 0 deletions pkg/minishift/openshift/version/openshift_versions.go
Expand Up @@ -26,7 +26,11 @@ import (
"sort"
"strings"

"github.com/docker/machine/libmachine/host"
"github.com/docker/machine/libmachine/provision"
"github.com/minishift/minishift/pkg/minishift/clusterup"
"github.com/minishift/minishift/pkg/minishift/constants"
"github.com/minishift/minishift/pkg/minishift/docker"
"github.com/minishift/minishift/pkg/util"
)

Expand All @@ -44,6 +48,12 @@ type ImageInfo struct {
OsFeatures interface{} `json:"os_features"`
}

func GetOpenshiftVersion(host *host.Host) (string, error) {
sshCommander := provision.GenericSSHCommander{Driver: host.Driver}
dockerCommander := docker.NewVmDockerCommander(sshCommander)
return dockerCommander.Exec(" ", constants.OpenshiftContainerName, "openshift", "version")
}

func PrintDownStreamVersions(output io.Writer, minSupportedVersion string) error {
resp, err := getResponseBody("https://registry.access.redhat.com/v1/repositories/openshift3/ose/tags")
if err != nil {
Expand Down
15 changes: 6 additions & 9 deletions test/integration/util/util.go
Expand Up @@ -102,19 +102,16 @@ func (m *MinishiftRunner) IsCDK() bool {
return strings.Contains(cmdOut, "minishift setup-cdk [flags]")
}

func (m *MinishiftRunner) EnsureRunning() {
if m.GetStatus() != "Running" {
m.Start()
}
m.CheckStatus("Running")
func (m *MinishiftRunner) IsMinishiftRunning() bool {
return strings.Contains(m.GetStatus(), "Minishift: Running")
}

func (m *MinishiftRunner) IsRunning() bool {
return m.GetStatus() == "Running"
func (m *MinishiftRunner) IsOpenshiftRunning() bool {
return strings.Contains(m.GetStatus(), "OpenShift: Running")
}

func (m *MinishiftRunner) GetOcRunner() *OcRunner {
if m.IsRunning() {
if m.IsMinishiftRunning() {
return NewOcRunner()
}
return nil
Expand Down Expand Up @@ -152,7 +149,7 @@ func (m *MinishiftRunner) GetStatus() string {
}

func (m *MinishiftRunner) CheckStatus(desired string) bool {
return m.GetStatus() == desired
return strings.Contains(m.GetStatus(), desired)
}

func NewOcRunner() *OcRunner {
Expand Down

0 comments on commit 6253c5c

Please sign in to comment.