Skip to content

Commit

Permalink
Include image metas in output when provided by imgpkg lock file
Browse files Browse the repository at this point in the history
Signed-off-by: Cari Dean <cdean@pivotal.io>
  • Loading branch information
gcheadle-vmware authored and cari-lynn committed Aug 25, 2021
1 parent 293147e commit 3d74e40
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 5 deletions.
14 changes: 13 additions & 1 deletion pkg/kbld/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package config
import (
"fmt"
"io/ioutil"
"reflect"

semver "github.com/hashicorp/go-version"
"github.com/k14s/imgpkg/pkg/imgpkg/lockconfig"
Expand Down Expand Up @@ -67,6 +68,13 @@ type ImageOverride struct {
NewImage string `json:"newImage"`
Preresolved bool `json:"preresolved,omitempty"`
TagSelection *versions.VersionSelection `json:"tagSelection,omitempty"`
ImageMetas []ImageMeta
}

type ImageMeta struct {
URL string `json:"URL"`
Type string `json:"Type"`
Tag string `json:"Tag"`
}

type ImageDestination struct {
Expand Down Expand Up @@ -167,12 +175,15 @@ func NewConfigFromImagesLock(res ctlres.Resource) (Config, error) {
overridesConfig := NewConfig()

for _, image := range imagesLock.Images {
var iMetas []ImageMeta
yaml.Unmarshal([]byte(image.Annotations[ImagesLockKbldMetas]), &iMetas)
iOverride := ImageOverride{
ImageRef: ImageRef{
Image: image.Annotations[ImagesLockKbldID],
},
NewImage: image.Image,
Preresolved: true,
ImageMetas: iMetas,
}
overridesConfig.Overrides = append(overridesConfig.Overrides, iOverride)
}
Expand Down Expand Up @@ -322,7 +333,8 @@ func UniqueImageOverrides(overrides []ImageOverride) []ImageOverride {
for _, override := range overrides {
var found bool
for _, addedOverride := range result {
if addedOverride == override {
// using DeepEqual instead of '==' since ImageOverride contains a slice
if reflect.DeepEqual(addedOverride, override) {
found = true
break
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/kbld/image/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func (f Factory) New(url string) Image {
if overrideConf, found := f.shouldOverride(url); found {
url = overrideConf.NewImage
if overrideConf.Preresolved {
return NewPreresolvedImage(url)
return NewPreresolvedImage(url, overrideConf.ImageMetas)
} else if overrideConf.TagSelection != nil {
return NewTagSelectedImage(url, overrideConf.TagSelection, f.registry)
}
Expand Down
20 changes: 17 additions & 3 deletions pkg/kbld/image/preresolved.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,35 @@

package image

import (
"github.com/k14s/kbld/pkg/kbld/config"
)

type PreresolvedImage struct {
url string
url string
metas []config.ImageMeta
}

type PreresolvedImageSourceURL struct {
Type string // always set to 'preresolved'
URL string
Tag string `json:",omitempty" yaml:",omitempty"`
}

func (PreresolvedImageSourceURL) meta() {}

func NewPreresolvedImage(url string) PreresolvedImage {
return PreresolvedImage{url}
func NewPreresolvedImage(url string, metas []config.ImageMeta) PreresolvedImage {
return PreresolvedImage{url, metas}
}

func (i PreresolvedImage) URL() (string, []Meta, error) {
if len(i.metas) > 0 {
var givenMetas []Meta
for _, m := range i.metas {
//TODO: should we change Type to 'preresolved' or keep whatever is given from lockfile?
givenMetas = append(givenMetas, PreresolvedImageSourceURL{Type: m.Type, URL: m.URL, Tag: m.Tag})
}
return i.url, givenMetas, nil
}
return i.url, []Meta{PreresolvedImageSourceURL{Type: "preresolved", URL: i.url}}, nil
}
40 changes: 40 additions & 0 deletions test/e2e/lock_output_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,3 +216,43 @@ images:
}

}

func TestImgpkgLockFileInputSuccessfulWithAnnotations(t *testing.T) {
env := BuildEnv(t)
kbld := Kbld{t, env.Namespace, env.KbldBinaryPath, Logger{}}

input := `
images:
- image: nginx:1.14.2
- image: sample-app
---
` + imgLock

out, _ := kbld.RunWithOpts([]string{"-f", "-"}, RunOpts{
StdinReader: strings.NewReader(input),
})

expectedOut := `---
---
images:
- image: index.docker.io/library/nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
- image: index.docker.io/library/nginx@sha256:4a5573037f358b6cdfa2f3e8a9c33a5cf11bcd1675ca72ca76fbe5bd77d0d682
metadata:
annotations:
kbld.k14s.io/images: |
- Metas:
- Tag: 1.15.1
Type: resolved
URL: nginx:1.15.1
URL: index.docker.io/library/nginx@sha256:4a5573037f358b6cdfa2f3e8a9c33a5cf11bcd1675ca72ca76fbe5bd77d0d682
- Metas:
- Tag: 1.14.2
Type: resolved
URL: nginx:1.14.2
URL: index.docker.io/library/nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
`
if out != expectedOut {
t.Fatalf("Expected >>>%s<<< to match >>>%s<<<", out, expectedOut)
}

}

0 comments on commit 3d74e40

Please sign in to comment.