Skip to content

Commit

Permalink
Merge pull request #13053 from tmcalves/validations_on_image_repository
Browse files Browse the repository at this point in the history
Fixes validation on image repository URL when it contains port but no scheme
  • Loading branch information
spowelljr authored Feb 18, 2022
2 parents dead617 + a9d3fe2 commit 70a98e3
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 10 deletions.
27 changes: 17 additions & 10 deletions cmd/minikube/cmd/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -1408,32 +1408,39 @@ func validateRegistryMirror() {
// args match the format of registry.cn-hangzhou.aliyuncs.com/google_containers
// also "<hostname>[:<port>]"
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
}
Expand Down
12 changes: 12 additions & 0 deletions cmd/minikube/cmd/start_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,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",
Expand All @@ -370,6 +378,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 {
Expand Down

0 comments on commit 70a98e3

Please sign in to comment.