@@ -42,23 +42,34 @@ type Status struct {
42
42
KubeconfigStatus string
43
43
}
44
44
45
+ const internalErrorCode = - 1
46
+
47
+ const (
48
+ minikubeNotRunningStatusFlag = 1 << 0
49
+ clusterNotRunningStatusFlag = 1 << 1
50
+ k8sNotRunningStatusFlag = 1 << 2
51
+ )
52
+
45
53
// statusCmd represents the status command
46
54
var statusCmd = & cobra.Command {
47
55
Use : "status" ,
48
56
Short : "Gets the status of a local kubernetes cluster" ,
49
- Long : `Gets the status of a local kubernetes cluster.` ,
57
+ Long : `Gets the status of a local kubernetes cluster.
58
+ Exit status contains the status of minikube's VM, cluster and kubernetes encoded on it's bits in this order from right to left.
59
+ Eg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for kubernetes NOK)` ,
50
60
Run : func (cmd * cobra.Command , args []string ) {
61
+ var returnCode = 0
51
62
api , err := machine .NewAPIClient ()
52
63
if err != nil {
53
64
fmt .Fprintf (os .Stderr , "Error getting client: %s\n " , err )
54
- os .Exit (1 )
65
+ os .Exit (internalErrorCode )
55
66
}
56
67
defer api .Close ()
57
68
58
69
ms , err := cluster .GetHostStatus (api )
59
70
if err != nil {
60
71
glog .Errorln ("Error getting machine status:" , err )
61
- cmdUtil .MaybeReportErrorAndExit (err )
72
+ cmdUtil .MaybeReportErrorAndExitWithCode (err , internalErrorCode )
62
73
}
63
74
64
75
cs := state .None .String ()
@@ -67,43 +78,51 @@ var statusCmd = &cobra.Command{
67
78
clusterBootstrapper , err := GetClusterBootstrapper (api , viper .GetString (cmdcfg .Bootstrapper ))
68
79
if err != nil {
69
80
glog .Errorf ("Error getting cluster bootstrapper: %s" , err )
70
- cmdUtil .MaybeReportErrorAndExit (err )
81
+ cmdUtil .MaybeReportErrorAndExitWithCode (err , internalErrorCode )
71
82
}
72
83
cs , err = clusterBootstrapper .GetClusterStatus ()
73
84
if err != nil {
74
85
glog .Errorln ("Error cluster status:" , err )
75
- cmdUtil .MaybeReportErrorAndExit (err )
86
+ cmdUtil .MaybeReportErrorAndExitWithCode (err , internalErrorCode )
87
+ } else if cs != state .Running .String () {
88
+ returnCode |= clusterNotRunningStatusFlag
76
89
}
90
+
77
91
ip , err := cluster .GetHostDriverIP (api )
78
92
if err != nil {
79
93
glog .Errorln ("Error host driver ip status:" , err )
80
- cmdUtil .MaybeReportErrorAndExit (err )
94
+ cmdUtil .MaybeReportErrorAndExitWithCode (err , internalErrorCode )
81
95
}
82
96
kstatus , err := kubeconfig .GetKubeConfigStatus (ip , cmdUtil .GetKubeConfigPath (), config .GetMachineName ())
83
97
if err != nil {
84
98
glog .Errorln ("Error kubeconfig status:" , err )
85
- cmdUtil .MaybeReportErrorAndExit (err )
99
+ cmdUtil .MaybeReportErrorAndExitWithCode (err , internalErrorCode )
86
100
}
87
101
if kstatus {
88
102
ks = "Correctly Configured: pointing to minikube-vm at " + ip .String ()
89
103
} else {
90
104
ks = "Misconfigured: pointing to stale minikube-vm." +
91
105
"\n To fix the kubectl context, run minikube update-context"
106
+ returnCode |= k8sNotRunningStatusFlag
92
107
}
108
+ } else {
109
+ returnCode |= minikubeNotRunningStatusFlag
93
110
}
94
111
95
112
status := Status {ms , cs , ks }
96
113
97
114
tmpl , err := template .New ("status" ).Parse (statusFormat )
98
115
if err != nil {
99
116
glog .Errorln ("Error creating status template:" , err )
100
- os .Exit (1 )
117
+ os .Exit (internalErrorCode )
101
118
}
102
119
err = tmpl .Execute (os .Stdout , status )
103
120
if err != nil {
104
121
glog .Errorln ("Error executing status template:" , err )
105
- os .Exit (1 )
122
+ os .Exit (internalErrorCode )
106
123
}
124
+
125
+ os .Exit (returnCode )
107
126
},
108
127
}
109
128
0 commit comments