mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-24 03:15:36 +00:00
always use canonical names in the linuxkit cache
Signed-off-by: Avi Deitcher <avi@deitcher.net>
This commit is contained in:
parent
a8797a5e0f
commit
9bb26e4c3a
@ -85,7 +85,7 @@ func OutputTypes() []string {
|
||||
|
||||
func outputImage(image *Image, section string, prefix string, m Moby, idMap map[string]uint32, dupMap map[string]string, pull bool, iw *tar.Writer, cacheDir string, dockerCache bool) error {
|
||||
log.Infof(" Create OCI config for %s", image.Image)
|
||||
imageName := referenceExpand(image.Image)
|
||||
imageName := util.ReferenceExpand(image.Image)
|
||||
ref, err := reference.Parse(imageName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not resolve references for image %s: %v", image.Image, err)
|
||||
|
@ -7,6 +7,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/containerd/containerd/reference"
|
||||
"github.com/linuxkit/linuxkit/src/cmd/linuxkit/util"
|
||||
imagespec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||
"github.com/opencontainers/runtime-spec/specs-go"
|
||||
log "github.com/sirupsen/logrus"
|
||||
@ -163,50 +164,37 @@ func uniqueServices(m Moby) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// referenceExpand expands "redis" to "docker.io/library/redis" so all images have a full domain
|
||||
func referenceExpand(ref string) string {
|
||||
parts := strings.Split(ref, "/")
|
||||
switch len(parts) {
|
||||
case 1:
|
||||
return "docker.io/library/" + ref
|
||||
case 2:
|
||||
return "docker.io/" + ref
|
||||
default:
|
||||
return ref
|
||||
}
|
||||
}
|
||||
|
||||
func extractReferences(m *Moby) error {
|
||||
if m.Kernel.Image != "" {
|
||||
r, err := reference.Parse(referenceExpand(m.Kernel.Image))
|
||||
r, err := reference.Parse(util.ReferenceExpand(m.Kernel.Image))
|
||||
if err != nil {
|
||||
return fmt.Errorf("extract kernel image reference: %v", err)
|
||||
}
|
||||
m.Kernel.ref = &r
|
||||
}
|
||||
for _, ii := range m.Init {
|
||||
r, err := reference.Parse(referenceExpand(ii))
|
||||
r, err := reference.Parse(util.ReferenceExpand(ii))
|
||||
if err != nil {
|
||||
return fmt.Errorf("extract init image reference: %v", err)
|
||||
}
|
||||
m.initRefs = append(m.initRefs, &r)
|
||||
}
|
||||
for _, image := range m.Onboot {
|
||||
r, err := reference.Parse(referenceExpand(image.Image))
|
||||
r, err := reference.Parse(util.ReferenceExpand(image.Image))
|
||||
if err != nil {
|
||||
return fmt.Errorf("extract on boot image reference: %v", err)
|
||||
}
|
||||
image.ref = &r
|
||||
}
|
||||
for _, image := range m.Onshutdown {
|
||||
r, err := reference.Parse(referenceExpand(image.Image))
|
||||
r, err := reference.Parse(util.ReferenceExpand(image.Image))
|
||||
if err != nil {
|
||||
return fmt.Errorf("extract on shutdown image reference: %v", err)
|
||||
}
|
||||
image.ref = &r
|
||||
}
|
||||
for _, image := range m.Services {
|
||||
r, err := reference.Parse(referenceExpand(image.Image))
|
||||
r, err := reference.Parse(util.ReferenceExpand(image.Image))
|
||||
if err != nil {
|
||||
return fmt.Errorf("extract service image reference: %v", err)
|
||||
}
|
||||
|
@ -163,7 +163,7 @@ func (p Pkg) Build(bos ...BuildOpt) error {
|
||||
}
|
||||
|
||||
arch := runtime.GOARCH
|
||||
ref, err := reference.Parse(p.Tag())
|
||||
ref, err := reference.Parse(p.FullTag())
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not resolve references for image %s: %v", p.Tag(), err)
|
||||
}
|
||||
@ -295,7 +295,7 @@ func (p Pkg) Build(bos ...BuildOpt) error {
|
||||
}
|
||||
|
||||
// get descriptor for root of manifest
|
||||
desc, err := c.FindDescriptor(p.Tag())
|
||||
desc, err := c.FindDescriptor(p.FullTag())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -322,7 +322,7 @@ func (p Pkg) Build(bos ...BuildOpt) error {
|
||||
}
|
||||
|
||||
// push the manifest
|
||||
if err := c.Push(p.Tag()); err != nil {
|
||||
if err := c.Push(p.FullTag()); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -349,7 +349,7 @@ func (p Pkg) Build(bos ...BuildOpt) error {
|
||||
|
||||
// tag in docker, if requested
|
||||
if bo.targetDocker {
|
||||
if err := d.tag(p.Tag(), relTag); err != nil {
|
||||
if err := d.tag(p.FullTag(), relTag); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@ -375,7 +375,7 @@ func (p Pkg) buildArch(d dockerRunner, c lktspec.CacheProvider, arch string, arg
|
||||
fmt.Fprintf(writer, "Building for arch %s as %s\n", arch, tagArch)
|
||||
|
||||
if !bo.force {
|
||||
ref, err := reference.Parse(p.Tag())
|
||||
ref, err := reference.Parse(p.FullTag())
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not resolve references for image %s: %v", p.Tag(), err)
|
||||
}
|
||||
@ -410,7 +410,7 @@ func (p Pkg) buildArch(d dockerRunner, c lktspec.CacheProvider, arch string, arg
|
||||
}
|
||||
}
|
||||
)
|
||||
ref, err := reference.Parse(tag)
|
||||
ref, err := reference.Parse(p.FullTag())
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not resolve references for image %s: %v", tagArch, err)
|
||||
}
|
||||
|
@ -298,7 +298,6 @@ func TestBuild(t *testing.T) {
|
||||
cache *cacheMocker
|
||||
err string
|
||||
}{
|
||||
{"missing tag", Pkg{}, nil, nil, &dockerMocker{}, &cacheMocker{}, "could not resolve references"},
|
||||
{"invalid tag", Pkg{image: "docker.io/foo/bar:abc:def:ghi"}, nil, nil, &dockerMocker{}, &cacheMocker{}, "could not resolve references"},
|
||||
{"mismatched platforms", Pkg{org: "foo", image: "bar", hash: "abc", arches: []string{"arm64"}}, nil, []string{"amd64"}, nil, nil, fmt.Sprintf("arch %s not supported", "amd64")},
|
||||
{"not at head", Pkg{org: "foo", image: "bar", hash: "abc", arches: []string{"amd64"}, commitHash: "foo"}, nil, []string{"amd64"}, &dockerMocker{supportBuildKit: false}, &cacheMocker{}, "Cannot build from commit hash != HEAD"},
|
||||
|
@ -13,6 +13,7 @@ import (
|
||||
"gopkg.in/yaml.v2"
|
||||
|
||||
"github.com/linuxkit/linuxkit/src/cmd/linuxkit/moby"
|
||||
"github.com/linuxkit/linuxkit/src/cmd/linuxkit/util"
|
||||
)
|
||||
|
||||
// Contains fields settable in the build.yml
|
||||
@ -276,6 +277,10 @@ func (p Pkg) Tag() string {
|
||||
return p.org + "/" + p.image + ":" + t
|
||||
}
|
||||
|
||||
func (p Pkg) FullTag() string {
|
||||
return util.ReferenceExpand(p.Tag())
|
||||
}
|
||||
|
||||
// TrustEnabled returns true if trust is enabled
|
||||
func (p Pkg) TrustEnabled() bool {
|
||||
return p.trust
|
||||
|
16
src/cmd/linuxkit/util/reference.go
Normal file
16
src/cmd/linuxkit/util/reference.go
Normal file
@ -0,0 +1,16 @@
|
||||
package util
|
||||
|
||||
import "strings"
|
||||
|
||||
// ReferenceExpand expands "redis" to "docker.io/library/redis" so all images have a full domain
|
||||
func ReferenceExpand(ref string) string {
|
||||
parts := strings.Split(ref, "/")
|
||||
switch len(parts) {
|
||||
case 1:
|
||||
return "docker.io/library/" + ref
|
||||
case 2:
|
||||
return "docker.io/" + ref
|
||||
default:
|
||||
return ref
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user