diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index 00a126f7dfb6..c2a74ba00c3a 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -1353,32 +1353,39 @@ func validateRegistryMirror() { // args match the format of registry.cn-hangzhou.aliyuncs.com/google_containers // also "[:]" func validateImageRepository(imageRepo string) (validImageRepo string) { + expression := regexp.MustCompile(`^(?:(\w+)\:\/\/)?([-a-zA-Z0-9]{1,}(?:\.[-a-zA-Z]{1,}){0,})(?:\:(\d+))?(\/.*)?$`) if strings.ToLower(imageRepo) == "auto" { - validImageRepo = "auto" + imageRepo = "auto" } - URL, err := url.Parse(imageRepo) - if err != nil { - klog.Errorln("Error Parsing URL: ", err) + if !expression.MatchString(imageRepo) { + klog.Errorln("Provided repository is not a valid URL. Defaulting to \"auto\"") + imageRepo = "auto" } var imageRepoPort string + groups := expression.FindStringSubmatch(imageRepo) + + scheme := groups[1] + hostname := groups[2] + port := groups[3] + path := groups[4] - if URL.Port() != "" && strings.Contains(imageRepo, ":"+URL.Port()) { - imageRepoPort = ":" + URL.Port() + if port != "" && strings.Contains(imageRepo, ":"+port) { + imageRepoPort = ":" + port } // tips when imageRepo ended with a trailing /. if strings.HasSuffix(imageRepo, "/") { - out.Infof("The --image-repository flag your provided ended with a trailing / that could cause conflict in kuberentes, removed automatically") + out.Infof("The --image-repository flag your provided ended with a trailing / that could cause conflict in kubernetes, removed automatically") } // tips when imageRepo started with scheme such as http(s). - if URL.Scheme != "" { - out.Infof("The --image-repository flag your provided contains Scheme: {{.scheme}}, which will be removed automatically", out.V{"scheme": URL.Scheme}) + if scheme != "" { + out.Infof("The --image-repository flag you provided contains Scheme: {{.scheme}}, which will be removed automatically", out.V{"scheme": scheme}) } - validImageRepo = URL.Hostname() + imageRepoPort + strings.TrimSuffix(URL.Path, "/") + validImageRepo = hostname + imageRepoPort + strings.TrimSuffix(path, "/") return validImageRepo } diff --git a/cmd/minikube/cmd/start_test.go b/cmd/minikube/cmd/start_test.go index 3fdad97f7198..e35638a7c607 100644 --- a/cmd/minikube/cmd/start_test.go +++ b/cmd/minikube/cmd/start_test.go @@ -329,6 +329,14 @@ func TestValidateImageRepository(t *testing.T) { imageRepository: "auto", validImageRepository: "auto", }, + { + imageRepository: "$$$$invalid", + validImageRepository: "auto", + }, + { + imageRepository: "", + validImageRepository: "auto", + }, { imageRepository: "http://registry.test.com/google_containers/", validImageRepository: "registry.test.com/google_containers", @@ -353,6 +361,10 @@ func TestValidateImageRepository(t *testing.T) { imageRepository: "https://registry.test.com:6666/google_containers", validImageRepository: "registry.test.com:6666/google_containers", }, + { + imageRepository: "registry.test.com:6666/google_containers", + validImageRepository: "registry.test.com:6666/google_containers", + }, } for _, test := range tests {