未验证 提交 69545496 编写于 作者: T Thomas Strömberg 提交者: GitHub

Merge pull request #5844 from rajula96reddy/issue-5836

Prevent minikube from crashing if namespace or service doesn't exist
......@@ -17,6 +17,7 @@ limitations under the License.
package cmd
import (
"errors"
"fmt"
"net/url"
"os"
......@@ -104,6 +105,11 @@ var serviceCmd = &cobra.Command{
urls, err := service.WaitForService(api, namespace, svc, serviceURLTemplate, serviceURLMode, https, wait, interval)
if err != nil {
var s *service.SVCNotFoundError
if errors.As(err, &s) {
exit.WithCodeT(exit.Data, `Service '{{.service}}' was not found in '{{.namespace}}' namespace.
You may select another namespace by using 'minikube service {{.service}} -n <namespace>'. Or list out all the services using 'minikube service list'`, out.V{"service": svc, "namespace": namespace})
}
exit.WithError("Error opening service", err)
}
......
......@@ -264,19 +264,34 @@ func PrintServiceList(writer io.Writer, data [][]string) {
table.Render()
}
// SVCNotFoundError error type handles 'service not found' scenarios
type SVCNotFoundError struct {
Err error
}
// Error method for SVCNotFoundError type
func (t SVCNotFoundError) Error() string {
return "Service not found"
}
// WaitForService waits for a service, and return the urls when available
func WaitForService(api libmachine.API, namespace string, service string, urlTemplate *template.Template, urlMode bool, https bool,
wait int, interval int) ([]string, error) {
var urlList []string
// Convert "Amount of time to wait" and "interval of each check" to attempts
if interval == 0 {
interval = 1
}
err := CheckService(namespace, service)
if err != nil {
return nil, &SVCNotFoundError{err}
}
chkSVC := func() error { return CheckService(namespace, service) }
if err := retry.Expo(chkSVC, time.Duration(interval)*time.Second, time.Duration(wait)*time.Second); err != nil {
return urlList, errors.Wrapf(err, "Service %s was not found in %q namespace. You may select another namespace by using 'minikube service %s -n <namespace>", service, namespace, service)
return nil, &SVCNotFoundError{err}
}
serviceURL, err := GetServiceURLsForService(api, namespace, service, urlTemplate)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册