Add rejection reason to 'unable to find driver' error
parent
5806bb01f2
commit
e09a1221bb
|
|
@ -561,9 +561,15 @@ func selectDriver(existing *config.ClusterConfig) registry.DriverState {
|
||||||
return ds
|
return ds
|
||||||
}
|
}
|
||||||
|
|
||||||
pick, alts := driver.Suggest(driver.Choices(viper.GetBool("vm")))
|
choices := driver.Choices(viper.GetBool("vm"))
|
||||||
|
pick, alts, rejects := driver.Suggest(choices)
|
||||||
if pick.Name == "" {
|
if pick.Name == "" {
|
||||||
exit.WithCodeT(exit.Config, "Unable to determine a default driver to use. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/")
|
out.T(out.ThumbsDown, "Unable to pick a default driver. Here is what was considered, in preference order:")
|
||||||
|
for _, r := range rejects {
|
||||||
|
out.T(out.Option, "{{ .name }}: {{ .rejection }}", out.V{"name": r.Name, "rejection": r.Rejection})
|
||||||
|
}
|
||||||
|
out.T(out.Workaround, "Try specifying a --driver, or see https://minikube.sigs.k8s.io/docs/start/")
|
||||||
|
os.Exit(exit.Unavailable)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(alts) > 1 {
|
if len(alts) > 1 {
|
||||||
|
|
|
||||||
|
|
@ -174,8 +174,8 @@ func Choices(vm bool) []registry.DriverState {
|
||||||
return options
|
return options
|
||||||
}
|
}
|
||||||
|
|
||||||
// Suggest returns a suggested driver from a set of options
|
// Suggest returns a suggested driver, alternate drivers, and rejected drivers
|
||||||
func Suggest(options []registry.DriverState) (registry.DriverState, []registry.DriverState) {
|
func Suggest(options []registry.DriverState) (registry.DriverState, []registry.DriverState, []registry.DriverState) {
|
||||||
pick := registry.DriverState{}
|
pick := registry.DriverState{}
|
||||||
for _, ds := range options {
|
for _, ds := range options {
|
||||||
if !ds.State.Installed {
|
if !ds.State.Installed {
|
||||||
|
|
@ -198,17 +198,30 @@ func Suggest(options []registry.DriverState) (registry.DriverState, []registry.D
|
||||||
}
|
}
|
||||||
|
|
||||||
alternates := []registry.DriverState{}
|
alternates := []registry.DriverState{}
|
||||||
|
rejects := []registry.DriverState{}
|
||||||
for _, ds := range options {
|
for _, ds := range options {
|
||||||
if ds != pick {
|
if ds != pick {
|
||||||
if !ds.State.Healthy || !ds.State.Installed {
|
glog.Errorf("%s: %s", ds.Name, ds.Rejection)
|
||||||
|
if !ds.State.Healthy {
|
||||||
|
ds.Rejection = fmt.Sprintf("Not healthy: %v", ds.State.Error)
|
||||||
|
rejects = append(rejects, ds)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !ds.State.Installed {
|
||||||
|
ds.Rejection = fmt.Sprintf("Not installed: %v", ds.State.Error)
|
||||||
|
rejects = append(rejects, ds)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
ds.Rejection = fmt.Sprintf("%s is preferred", pick.Name)
|
||||||
alternates = append(alternates, ds)
|
alternates = append(alternates, ds)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
glog.Infof("Picked: %+v", pick)
|
glog.Infof("Picked: %+v", pick)
|
||||||
glog.Infof("Alternatives: %+v", alternates)
|
glog.Infof("Alternatives: %+v", alternates)
|
||||||
return pick, alternates
|
glog.Infof("Rejects: %+v", rejects)
|
||||||
|
return pick, alternates, rejects
|
||||||
}
|
}
|
||||||
|
|
||||||
// Status returns the status of a driver
|
// Status returns the status of a driver
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,7 @@ var styles = map[StyleEnum]style{
|
||||||
Launch: {Prefix: "🚀 "},
|
Launch: {Prefix: "🚀 "},
|
||||||
Sad: {Prefix: "😿 "},
|
Sad: {Prefix: "😿 "},
|
||||||
ThumbsUp: {Prefix: "👍 "},
|
ThumbsUp: {Prefix: "👍 "},
|
||||||
|
ThumbsDown: {Prefix: "👎 "},
|
||||||
Option: {Prefix: " ▪ ", LowPrefix: lowIndent}, // Indented bullet
|
Option: {Prefix: " ▪ ", LowPrefix: lowIndent}, // Indented bullet
|
||||||
Command: {Prefix: " ▪ ", LowPrefix: lowIndent}, // Indented bullet
|
Command: {Prefix: " ▪ ", LowPrefix: lowIndent}, // Indented bullet
|
||||||
LogEntry: {Prefix: " "}, // Indent
|
LogEntry: {Prefix: " "}, // Indent
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ const (
|
||||||
Launch
|
Launch
|
||||||
Sad
|
Sad
|
||||||
ThumbsUp
|
ThumbsUp
|
||||||
|
ThumbsDown
|
||||||
Option
|
Option
|
||||||
Command
|
Command
|
||||||
LogEntry
|
LogEntry
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,8 @@ type DriverState struct {
|
||||||
Name string
|
Name string
|
||||||
Priority Priority
|
Priority Priority
|
||||||
State State
|
State State
|
||||||
|
// Rejection is why we chose not to use this driver
|
||||||
|
Rejection string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d DriverState) String() string {
|
func (d DriverState) String() string {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue