Merge pull request #1264 from greut/fix/1172
pkg: prepend library when using registry mirror
This commit is contained in:
commit
46f270bbd4
|
|
@ -21,6 +21,7 @@ import (
|
|||
"path/filepath"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/GoogleContainerTools/kaniko/pkg/cache"
|
||||
"github.com/GoogleContainerTools/kaniko/pkg/config"
|
||||
|
|
@ -117,6 +118,11 @@ func remoteImage(image string, opts *config.KanikoOptions) (v1.Image, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
ref, err = normalizeReference(ref, image)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
toSet = true
|
||||
}
|
||||
|
||||
|
|
@ -134,16 +140,31 @@ func remoteImage(image string, opts *config.KanikoOptions) (v1.Image, error) {
|
|||
tag.Repository.Registry = newReg
|
||||
ref = tag
|
||||
}
|
||||
|
||||
if digest, ok := ref.(name.Digest); ok {
|
||||
digest.Repository.Registry = newReg
|
||||
ref = digest
|
||||
}
|
||||
}
|
||||
|
||||
logrus.Infof("Retrieving image %s", ref)
|
||||
|
||||
rOpts := remoteOptions(registryName, opts)
|
||||
return remote.Image(ref, rOpts...)
|
||||
}
|
||||
|
||||
// normalizeReference adds the library/ prefix to images without it.
|
||||
//
|
||||
// It is mostly useful when using a registry mirror that is not able to perform
|
||||
// this fix automatically.
|
||||
func normalizeReference(ref name.Reference, image string) (name.Reference, error) {
|
||||
if !strings.ContainsRune(image, '/') {
|
||||
return name.ParseReference("library/"+image, name.WeakValidation)
|
||||
}
|
||||
|
||||
return ref, nil
|
||||
}
|
||||
|
||||
func remoteOptions(registryName string, opts *config.KanikoOptions) []remote.Option {
|
||||
tr := util.MakeTransport(opts, registryName)
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import (
|
|||
"bytes"
|
||||
"testing"
|
||||
|
||||
"github.com/google/go-containerregistry/pkg/name"
|
||||
v1 "github.com/google/go-containerregistry/pkg/v1"
|
||||
"github.com/google/go-containerregistry/pkg/v1/empty"
|
||||
"github.com/moby/buildkit/frontend/dockerfile/instructions"
|
||||
|
|
@ -109,6 +110,25 @@ func Test_ScratchImageFromMirror(t *testing.T) {
|
|||
testutil.CheckErrorAndDeepEqual(t, false, err, expected, actual)
|
||||
}
|
||||
|
||||
func Test_normalizeReference(t *testing.T) {
|
||||
image := "debian"
|
||||
expected := "index.docker.io/library/debian:latest"
|
||||
|
||||
ref, err := name.ParseReference(image)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
ref2, err := normalizeReference(ref, image)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if ref2.Name() != ref.Name() || ref2.Name() != expected {
|
||||
t.Errorf("%s should have been normalized to %s, got %s", ref2.Name(), expected, ref.Name())
|
||||
}
|
||||
}
|
||||
|
||||
// parse parses the contents of a Dockerfile and returns a list of commands
|
||||
func parse(s string) ([]instructions.Stage, error) {
|
||||
p, err := parser.Parse(bytes.NewReader([]byte(s)))
|
||||
|
|
|
|||
Loading…
Reference in New Issue