// getImageStreamImageSuggestion will return the appropriate marker Suggestion for when a BuildConfig is missing its input ImageStreamImage func getImageStreamImageSuggestion(imageID string, imageStream *imageapi.ImageStream) osgraph.Suggestion { // check the images stream to see if any import images are in flight or have failed annotation, ok := imageStream.Annotations[imageapi.DockerImageRepositoryCheckAnnotation] if !ok { return osgraph.Suggestion(fmt.Sprintf("`oc import-image %s --from=` where `--from` specifies an image with hexadecimal ID %s", imageStream.GetName(), imageID)) } if checkTime, err := time.Parse(time.RFC3339, annotation); err == nil { // this time based annotation is set by pkg/image/controller/controller.go whenever import/tag operations are performed; unless // in the midst of an import/tag operation, it stays set and serves as a timestamp for when the last operation occurred; // so we will check if the image stream has been updated "recently"; // in case it is a slow link to the remote repo, see if if the check annotation occured within the last 5 minutes; if so, consider that as potentially "in progress" compareTime := checkTime.Add(5 * time.Minute) currentTime, _ := time.Parse(time.RFC3339, unversioned.Now().UTC().Format(time.RFC3339)) if compareTime.Before(currentTime) { return osgraph.Suggestion(fmt.Sprintf("`oc import-image %s --from=` where `--from` specifies an image with hexadecimal ID %s", imageStream.GetName(), imageID)) } return osgraph.Suggestion(fmt.Sprintf("`oc import-image %s --from=` with hexadecimal ID %s possibly in progress", imageStream.GetName(), imageID)) } return osgraph.Suggestion(fmt.Sprintf("Possible error occurred with `oc import-image %s --from=` with hexadecimal ID %s; inspect images stream annotations", imageStream.GetName(), imageID)) }