mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-26 20:18:52 +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 {
|
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)
|
log.Infof(" Create OCI config for %s", image.Image)
|
||||||
imageName := referenceExpand(image.Image)
|
imageName := util.ReferenceExpand(image.Image)
|
||||||
ref, err := reference.Parse(imageName)
|
ref, err := reference.Parse(imageName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("could not resolve references for image %s: %v", image.Image, err)
|
return fmt.Errorf("could not resolve references for image %s: %v", image.Image, err)
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/containerd/containerd/reference"
|
"github.com/containerd/containerd/reference"
|
||||||
|
"github.com/linuxkit/linuxkit/src/cmd/linuxkit/util"
|
||||||
imagespec "github.com/opencontainers/image-spec/specs-go/v1"
|
imagespec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
"github.com/opencontainers/runtime-spec/specs-go"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
@ -163,50 +164,37 @@ func uniqueServices(m Moby) error {
|
|||||||
return nil
|
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 {
|
func extractReferences(m *Moby) error {
|
||||||
if m.Kernel.Image != "" {
|
if m.Kernel.Image != "" {
|
||||||
r, err := reference.Parse(referenceExpand(m.Kernel.Image))
|
r, err := reference.Parse(util.ReferenceExpand(m.Kernel.Image))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("extract kernel image reference: %v", err)
|
return fmt.Errorf("extract kernel image reference: %v", err)
|
||||||
}
|
}
|
||||||
m.Kernel.ref = &r
|
m.Kernel.ref = &r
|
||||||
}
|
}
|
||||||
for _, ii := range m.Init {
|
for _, ii := range m.Init {
|
||||||
r, err := reference.Parse(referenceExpand(ii))
|
r, err := reference.Parse(util.ReferenceExpand(ii))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("extract init image reference: %v", err)
|
return fmt.Errorf("extract init image reference: %v", err)
|
||||||
}
|
}
|
||||||
m.initRefs = append(m.initRefs, &r)
|
m.initRefs = append(m.initRefs, &r)
|
||||||
}
|
}
|
||||||
for _, image := range m.Onboot {
|
for _, image := range m.Onboot {
|
||||||
r, err := reference.Parse(referenceExpand(image.Image))
|
r, err := reference.Parse(util.ReferenceExpand(image.Image))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("extract on boot image reference: %v", err)
|
return fmt.Errorf("extract on boot image reference: %v", err)
|
||||||
}
|
}
|
||||||
image.ref = &r
|
image.ref = &r
|
||||||
}
|
}
|
||||||
for _, image := range m.Onshutdown {
|
for _, image := range m.Onshutdown {
|
||||||
r, err := reference.Parse(referenceExpand(image.Image))
|
r, err := reference.Parse(util.ReferenceExpand(image.Image))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("extract on shutdown image reference: %v", err)
|
return fmt.Errorf("extract on shutdown image reference: %v", err)
|
||||||
}
|
}
|
||||||
image.ref = &r
|
image.ref = &r
|
||||||
}
|
}
|
||||||
for _, image := range m.Services {
|
for _, image := range m.Services {
|
||||||
r, err := reference.Parse(referenceExpand(image.Image))
|
r, err := reference.Parse(util.ReferenceExpand(image.Image))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("extract service image reference: %v", err)
|
return fmt.Errorf("extract service image reference: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -163,7 +163,7 @@ func (p Pkg) Build(bos ...BuildOpt) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
arch := runtime.GOARCH
|
arch := runtime.GOARCH
|
||||||
ref, err := reference.Parse(p.Tag())
|
ref, err := reference.Parse(p.FullTag())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("could not resolve references for image %s: %v", p.Tag(), err)
|
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
|
// get descriptor for root of manifest
|
||||||
desc, err := c.FindDescriptor(p.Tag())
|
desc, err := c.FindDescriptor(p.FullTag())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -322,7 +322,7 @@ func (p Pkg) Build(bos ...BuildOpt) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// push the manifest
|
// push the manifest
|
||||||
if err := c.Push(p.Tag()); err != nil {
|
if err := c.Push(p.FullTag()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -349,7 +349,7 @@ func (p Pkg) Build(bos ...BuildOpt) error {
|
|||||||
|
|
||||||
// tag in docker, if requested
|
// tag in docker, if requested
|
||||||
if bo.targetDocker {
|
if bo.targetDocker {
|
||||||
if err := d.tag(p.Tag(), relTag); err != nil {
|
if err := d.tag(p.FullTag(), relTag); err != nil {
|
||||||
return err
|
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)
|
fmt.Fprintf(writer, "Building for arch %s as %s\n", arch, tagArch)
|
||||||
|
|
||||||
if !bo.force {
|
if !bo.force {
|
||||||
ref, err := reference.Parse(p.Tag())
|
ref, err := reference.Parse(p.FullTag())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not resolve references for image %s: %v", p.Tag(), err)
|
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 {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not resolve references for image %s: %v", tagArch, err)
|
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
|
cache *cacheMocker
|
||||||
err string
|
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"},
|
{"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")},
|
{"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"},
|
{"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"
|
"gopkg.in/yaml.v2"
|
||||||
|
|
||||||
"github.com/linuxkit/linuxkit/src/cmd/linuxkit/moby"
|
"github.com/linuxkit/linuxkit/src/cmd/linuxkit/moby"
|
||||||
|
"github.com/linuxkit/linuxkit/src/cmd/linuxkit/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Contains fields settable in the build.yml
|
// Contains fields settable in the build.yml
|
||||||
@ -276,6 +277,10 @@ func (p Pkg) Tag() string {
|
|||||||
return p.org + "/" + p.image + ":" + t
|
return p.org + "/" + p.image + ":" + t
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p Pkg) FullTag() string {
|
||||||
|
return util.ReferenceExpand(p.Tag())
|
||||||
|
}
|
||||||
|
|
||||||
// TrustEnabled returns true if trust is enabled
|
// TrustEnabled returns true if trust is enabled
|
||||||
func (p Pkg) TrustEnabled() bool {
|
func (p Pkg) TrustEnabled() bool {
|
||||||
return p.trust
|
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