From 9b4fdcf35ac71ad96a002be7a31c81da999d5c21 Mon Sep 17 00:00:00 2001 From: dimw Date: Mon, 25 Jan 2021 21:38:28 +0100 Subject: [PATCH] Add support for setting the name while keeping the digest - And the other way around Issue: #3487 --- .../internal/commands/edit/set/setimage.go | 18 ++++++ .../commands/edit/set/setimage_test.go | 57 +++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/kustomize/internal/commands/edit/set/setimage.go b/kustomize/internal/commands/edit/set/setimage.go index b900c10c1..3b2517c36 100644 --- a/kustomize/internal/commands/edit/set/setimage.go +++ b/kustomize/internal/commands/edit/set/setimage.go @@ -140,6 +140,11 @@ func (o *setImageOptions) RunSetImage(fSys filesys.FileSystem) error { argIm = replaceNewTag(argIm, im.NewTag) } + // Reuse the existing digest when asterisk disgest is passed + if argIm.Digest == preserveSeparator { + argIm = replaceDigest(argIm, im.Digest) + } + o.imageMap[im.Name] = argIm continue @@ -159,6 +164,10 @@ func (o *setImageOptions) RunSetImage(fSys filesys.FileSystem) error { v = replaceNewTag(v, "") } + if v.Digest == preserveSeparator { + v = replaceDigest(v, "") + } + images = append(images, v) } @@ -188,6 +197,15 @@ func replaceNewTag(image types.Image, newTag string) types.Image { } } +func replaceDigest(image types.Image, digest string) types.Image { + return types.Image{ + Name: image.Name, + NewName: image.NewName, + NewTag: image.NewTag, + Digest: digest, + } +} + func parse(arg string) (types.Image, error) { // matches if there is an image name to overwrite diff --git a/kustomize/internal/commands/edit/set/setimage_test.go b/kustomize/internal/commands/edit/set/setimage_test.go index ef720b485..77a3b308c 100644 --- a/kustomize/internal/commands/edit/set/setimage_test.go +++ b/kustomize/internal/commands/edit/set/setimage_test.go @@ -349,6 +349,63 @@ func TestSetImage(t *testing.T) { " newName: my-image1", }}, }, + { + description: "keep new name and update digest", + given: given{ + args: []string{"image2=*@sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3"}, + infileImages: []string{ + "images:", + "- name: image2", + " newName: my-image2", + " digest: sha256:abcdef12345", + }, + }, + expected: expected{ + fileOutput: []string{ + "images:", + "- digest: sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3", + " name: image2", + " newName: my-image2", + }}, + }, + { + description: "keep new name, remove tag, and set digest", + given: given{ + args: []string{"image2=*@sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3"}, + infileImages: []string{ + "images:", + "- name: image2", + " newName: my-image2", + " newTag: my-tag", + }, + }, + expected: expected{ + fileOutput: []string{ + "images:", + "- digest: sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3", + " name: image2", + " newName: my-image2", + }}, + }, + { + description: "update new name and keep the digest", + given: given{ + args: []string{"image2=my-image2@*"}, + infileImages: []string{ + "images:", + "- digest: sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3", + " name: image2", + " newName: foo.bar.foo:8800/foo/image1", + }, + }, + expected: expected{ + fileOutput: []string{ + "images:", + "- digest: sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3", + " name: image2", + " newName: my-image2", + }}, + }, } for _, tc := range testCases {