Add --image-name-tag-with-digest flag (#1541)

This commit is contained in:
Or Geva
2021-01-19 13:28:05 -08:00
committed by GitHub
parent ece215c181
commit b3e036aab2
5 changed files with 81 additions and 30 deletions
+14 -3
View File
@@ -169,7 +169,7 @@ func DoPush(image v1.Image, opts *config.KanikoOptions) error {
t := timing.Start("Total Push Time")
var digestByteArray []byte
var builder strings.Builder
if opts.DigestFile != "" || opts.ImageNameDigestFile != "" {
if opts.DigestFile != "" || opts.ImageNameDigestFile != "" || opts.ImageNameTagDigestFile != "" {
var err error
digestByteArray, err = getDigest(image)
if err != nil {
@@ -200,8 +200,12 @@ func DoPush(image v1.Image, opts *config.KanikoOptions) error {
if err != nil {
return errors.Wrap(err, "getting tag for destination")
}
if opts.ImageNameDigestFile != "" {
imageName := []byte(destRef.Repository.Name() + "@")
if opts.ImageNameDigestFile != "" || opts.ImageNameTagDigestFile != "" {
tag := ""
if opts.ImageNameTagDigestFile != "" && destRef.TagStr() != "" {
tag = ":" + destRef.TagStr()
}
imageName := []byte(destRef.Repository.Name() + tag + "@")
builder.Write(append(imageName, digestByteArray...))
builder.WriteString("\n")
}
@@ -215,6 +219,13 @@ func DoPush(image v1.Image, opts *config.KanikoOptions) error {
}
}
if opts.ImageNameTagDigestFile != "" {
err := ioutil.WriteFile(opts.ImageNameTagDigestFile, []byte(builder.String()), 0644)
if err != nil {
return errors.Wrap(err, "writing image name with image tag and digest to file failed")
}
}
if opts.TarPath != "" {
tagToImage := map[name.Tag]v1.Image{}
+30
View File
@@ -333,6 +333,36 @@ func TestImageNameDigestFile(t *testing.T) {
}
func TestImageNameTagDigestFile(t *testing.T) {
image, err := random.Image(1024, 4)
if err != nil {
t.Fatalf("could not create image: %s", err)
}
digest, err := image.Digest()
if err != nil {
t.Fatalf("could not get image digest: %s", err)
}
opts := config.KanikoOptions{
NoPush: true,
Destinations: []string{"gcr.io/foo/bar:123", "bob/image"},
ImageNameTagDigestFile: "tmpFile",
}
defer os.Remove("tmpFile")
if err := DoPush(image, &opts); err != nil {
t.Fatalf("could not push image: %s", err)
}
want := []byte("gcr.io/foo/bar:123@" + digest.String() + "\nindex.docker.io/bob/image:latest@" + digest.String() + "\n")
got, err := ioutil.ReadFile("tmpFile")
testutil.CheckErrorAndDeepEqual(t, false, err, want, got)
}
var calledExecCommand = []bool{}
var calledCheckPushPermission = false