Browse code

Allow to use star as repository name in imagestreamimport

Signed-off-by: Gladkov Alexey <agladkov@redhat.com>

Gladkov Alexey authored on 2016/11/04 22:29:37
Showing 3 changed files
... ...
@@ -75,7 +75,7 @@ func (r DockerClientSearcher) Search(precise bool, terms ...string) (ComponentMa
75 75
 		termMatches := ScoredComponentMatches{}
76 76
 
77 77
 		// first look for the image in the remote docker registry
78
-		if r.RegistrySearcher != nil && ref.String() != "*" {
78
+		if r.RegistrySearcher != nil {
79 79
 			glog.V(4).Infof("checking remote registry for %q", ref.String())
80 80
 			matches, err := r.RegistrySearcher.Search(precise, term)
81 81
 			errs = append(errs, err...)
... ...
@@ -308,6 +308,13 @@ func ValidateImageStreamImport(isi *api.ImageStreamImport) field.ErrorList {
308 308
 			if len(spec.From.Name) == 0 {
309 309
 				errs = append(errs, field.Required(imagesPath.Index(i).Child("from", "name"), ""))
310 310
 			} else {
311
+				// The ParseDockerImageReference qualifies '*' as a wrong name.
312
+				// The legacy clients use this character to look up imagestreams.
313
+				// TODO: This should be removed in 1.6
314
+				// See for more info: https://github.com/openshift/origin/pull/11774#issuecomment-258905994
315
+				if spec.From.Name == "*" {
316
+					continue
317
+				}
311 318
 				if ref, err := api.ParseDockerImageReference(spec.From.Name); err != nil {
312 319
 					errs = append(errs, field.Invalid(imagesPath.Index(i).Child("from", "name"), spec.From.Name, err.Error()))
313 320
 				} else {
... ...
@@ -110,10 +110,20 @@ func (i *ImageStreamImporter) importImages(ctx gocontext.Context, retriever Repo
110 110
 		if from.Kind != "DockerImage" {
111 111
 			continue
112 112
 		}
113
-		ref, err := api.ParseDockerImageReference(from.Name)
114
-		if err != nil {
115
-			isi.Status.Images[i].Status = invalidStatus("", field.Invalid(field.NewPath("from", "name"), from.Name, fmt.Sprintf("invalid name: %v", err)))
116
-			continue
113
+		// TODO: This should be removed in 1.6
114
+		// See for more info: https://github.com/openshift/origin/pull/11774#issuecomment-258905994
115
+		var (
116
+			err error
117
+			ref api.DockerImageReference
118
+		)
119
+		if from.Name != "*" {
120
+			ref, err = api.ParseDockerImageReference(from.Name)
121
+			if err != nil {
122
+				isi.Status.Images[i].Status = invalidStatus("", field.Invalid(field.NewPath("from", "name"), from.Name, fmt.Sprintf("invalid name: %v", err)))
123
+				continue
124
+			}
125
+		} else {
126
+			ref = api.DockerImageReference{Name: from.Name}
117 127
 		}
118 128
 		defaultRef := ref.DockerClientDefaults()
119 129
 		repoName := defaultRef.RepositoryName()
... ...
@@ -217,11 +227,22 @@ func (i *ImageStreamImporter) importFromRepository(ctx gocontext.Context, retrie
217 217
 	if from.Kind != "DockerImage" {
218 218
 		return
219 219
 	}
220
-	ref, err := api.ParseDockerImageReference(from.Name)
221
-	if err != nil {
222
-		status.Status = invalidStatus("", field.Invalid(field.NewPath("from", "name"), from.Name, fmt.Sprintf("invalid name: %v", err)))
223
-		return
220
+	// TODO: This should be removed in 1.6
221
+	// See for more info: https://github.com/openshift/origin/pull/11774#issuecomment-258905994
222
+	var (
223
+		err error
224
+		ref api.DockerImageReference
225
+	)
226
+	if from.Name != "*" {
227
+		ref, err = api.ParseDockerImageReference(from.Name)
228
+		if err != nil {
229
+			status.Status = invalidStatus("", field.Invalid(field.NewPath("from", "name"), from.Name, fmt.Sprintf("invalid name: %v", err)))
230
+			return
231
+		}
232
+	} else {
233
+		ref = api.DockerImageReference{Name: from.Name}
224 234
 	}
235
+
225 236
 	defaultRef := ref.DockerClientDefaults()
226 237
 	repoName := defaultRef.RepositoryName()
227 238
 	registryURL := defaultRef.RegistryURL()