// parseImageDestination converts image URL-like string to an ImageDestination. func parseImageDestination(c *cli.Context, name string) (types.ImageDestination, error) { var ( certPath = c.GlobalString("cert-path") tlsVerify = c.GlobalBool("tls-verify") // FIXME!! defaults to false? ) switch { case strings.HasPrefix(name, dockerPrefix): return docker.NewDockerImageDestination(strings.TrimPrefix(name, dockerPrefix), certPath, tlsVerify) case strings.HasPrefix(name, atomicPrefix): return openshift.NewOpenshiftImageDestination(strings.TrimPrefix(name, atomicPrefix), certPath, tlsVerify) case strings.HasPrefix(name, directoryPrefix): return directory.NewDirImageDestination(strings.TrimPrefix(name, directoryPrefix)), nil } return nil, fmt.Errorf("Unrecognized image reference %s", name) }
// NewOpenshiftImageDestination creates a new ImageDestination for the specified image and connection specification. func NewOpenshiftImageDestination(imageName, certPath string, tlsVerify bool) (types.ImageDestination, error) { client, err := newOpenshiftClient(imageName) if err != nil { return nil, err } // FIXME: Should this always use a digest, not a tag? Uploading to Docker by tag requires the tag _inside_ the manifest to match, // i.e. a single signed image cannot be available under multiple tags. But with types.ImageDestination, we don't know // the manifest digest at this point. dockerRef := fmt.Sprintf("%s/%s/%s:%s", client.dockerRegistryHostPart(), client.namespace, client.stream, client.tag) docker, err := docker.NewDockerImageDestination(dockerRef, certPath, tlsVerify) if err != nil { return nil, err } return &openshiftImageDestination{ client: client, docker: docker, }, nil }