podman/libpod/image/parts.go
baude b85b217f55 Stage3 Image Library
This represents the stage3 implementation for the image library.  At this point, we
are moving the image-centric functions to pkg/image including migration of args and
object-oriented references.  This is a not a one-for-one migration of funcs and some
funcs will need to continue to reside in runtime_img as they are overly specific to
libpod and probably not useful to others.

Signed-off-by: baude <bbaude@redhat.com>

Closes: #484
Approved by: baude
2018-03-14 20:21:31 +00:00

63 lines
1.4 KiB
Go

package image
import (
"fmt"
"github.com/containers/image/docker/reference"
)
// imageParts describes the parts of an image's name
type imageParts struct {
transport string
registry string
name string
tag string
isTagged bool
hasRegistry bool
}
// decompose breaks an input name into an imageParts description
func decompose(input string) (imageParts, error) {
var (
parts imageParts
hasRegistry bool
tag string
)
imgRef, err := reference.Parse(input)
if err != nil {
return parts, err
}
ntag, isTagged, err := getTags(input)
if err != nil {
return parts, err
}
if !isTagged {
tag = "latest"
} else {
tag = ntag.Tag()
}
registry := reference.Domain(imgRef.(reference.Named))
if registry != "" {
hasRegistry = true
}
imageName := reference.Path(imgRef.(reference.Named))
return imageParts{
registry: registry,
hasRegistry: hasRegistry,
name: imageName,
tag: tag,
isTagged: isTagged,
transport: DefaultTransport,
}, nil
}
// assemble concatenates an image's parts into a string
func (ip *imageParts) assemble() string {
return fmt.Sprintf("%s/%s:%s", ip.registry, ip.name, ip.tag)
}
// assemble concatenates an image's parts with transport into a string
func (ip *imageParts) assembleWithTransport() string {
return fmt.Sprintf("%s%s/%s:%s", ip.transport, ip.registry, ip.name, ip.tag)
}