Skip to content

Commit

Permalink
fix: ensure operator images are included in rendered bundles related …
Browse files Browse the repository at this point in the history
…images (#771)

Signed-off-by: Joe Lanford <joe.lanford@gmail.com>
  • Loading branch information
joelanford committed Sep 1, 2021
1 parent 86907e1 commit f5dcf40
Show file tree
Hide file tree
Showing 4 changed files with 153 additions and 22 deletions.
36 changes: 36 additions & 0 deletions alpha/action/render.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"io/ioutil"
"os"
"path/filepath"
"sort"
"strings"
"sync"

Expand Down Expand Up @@ -76,6 +77,13 @@ func (r Render) Run(ctx context.Context) (*declcfg.DeclarativeConfig, error) {
return nil, fmt.Errorf("render reference %q: %w", ref, err)
}
renderBundleObjects(cfg)

for _, b := range cfg.Bundles {
sort.Slice(b.RelatedImages, func(i, j int) bool {
return b.RelatedImages[i].Image < b.RelatedImages[j].Image
})
}

cfgs = append(cfgs, *cfg)
}

Expand Down Expand Up @@ -233,6 +241,7 @@ func sqliteToDeclcfg(ctx context.Context, dbFile string) (*declcfg.DeclarativeCo
if err := populateDBRelatedImages(ctx, &cfg, db); err != nil {
return nil, err
}

return &cfg, nil
}

Expand Down Expand Up @@ -322,6 +331,33 @@ func getRelatedImages(b *registry.Bundle) ([]declcfg.RelatedImage, error) {
if err = json.Unmarshal(*rawValue, &relatedImages); err != nil {
return nil, err
}

// Keep track of the images we've already found, so that we don't add
// them multiple times.
allImages := sets.NewString()
for _, ri := range relatedImages {
allImages = allImages.Insert(ri.Image)
}

if !allImages.Has(b.BundleImage) {
relatedImages = append(relatedImages, declcfg.RelatedImage{
Image: b.BundleImage,
})
}

opImages, err := csv.GetOperatorImages()
if err != nil {
return nil, err
}
for img := range opImages {
if !allImages.Has(img) {
relatedImages = append(relatedImages, declcfg.RelatedImage{
Image: img,
})
}
allImages = allImages.Insert(img)
}

return relatedImages, nil
}

Expand Down
108 changes: 88 additions & 20 deletions alpha/action/render_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,11 @@ func TestRender(t *testing.T) {
},
RelatedImages: []declcfg.RelatedImage{
{
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.1.0",
Image: "test.registry/foo-operator/foo-bundle:v0.1.0",
},
{
Image: "test.registry/foo-operator/foo-bundle:v0.1.0",
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.1.0",
},
},
CsvJSON: string(foov1csv),
Expand All @@ -124,12 +124,25 @@ func TestRender(t *testing.T) {
},
RelatedImages: []declcfg.RelatedImage{
{
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.2.0",
Image: "test.registry/foo-operator/foo-2:v0.2.0",
},
{
Image: "test.registry/foo-operator/foo-bundle:v0.2.0",
},
{
Image: "test.registry/foo-operator/foo-init-2:v0.2.0",
},
{
Image: "test.registry/foo-operator/foo-init:v0.2.0",
},
{
Name: "other",
Image: "test.registry/foo-operator/foo-other:v0.2.0",
},
{
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.2.0",
},
},
CsvJSON: string(foov2csv),
Objects: []string{string(foov2csv), string(foov2crd)},
Expand Down Expand Up @@ -171,11 +184,11 @@ func TestRender(t *testing.T) {
},
RelatedImages: []declcfg.RelatedImage{
{
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.1.0",
Image: "test.registry/foo-operator/foo-bundle:v0.1.0",
},
{
Image: "test.registry/foo-operator/foo-bundle:v0.1.0",
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.1.0",
},
},
CsvJSON: string(foov1csv),
Expand All @@ -201,12 +214,25 @@ func TestRender(t *testing.T) {
},
RelatedImages: []declcfg.RelatedImage{
{
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.2.0",
Image: "test.registry/foo-operator/foo-2:v0.2.0",
},
{
Image: "test.registry/foo-operator/foo-bundle:v0.2.0",
},
{
Image: "test.registry/foo-operator/foo-init-2:v0.2.0",
},
{
Image: "test.registry/foo-operator/foo-init:v0.2.0",
},
{
Name: "other",
Image: "test.registry/foo-operator/foo-other:v0.2.0",
},
{
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.2.0",
},
},
CsvJSON: string(foov2csv),
Objects: []string{string(foov2csv), string(foov2crd)},
Expand Down Expand Up @@ -247,11 +273,11 @@ func TestRender(t *testing.T) {
},
RelatedImages: []declcfg.RelatedImage{
{
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.1.0",
Image: "test.registry/foo-operator/foo-bundle:v0.1.0",
},
{
Image: "test.registry/foo-operator/foo-bundle:v0.1.0",
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.1.0",
},
},
CsvJSON: string(foov1csv),
Expand All @@ -277,12 +303,25 @@ func TestRender(t *testing.T) {
},
RelatedImages: []declcfg.RelatedImage{
{
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.2.0",
Image: "test.registry/foo-operator/foo-2:v0.2.0",
},
{
Image: "test.registry/foo-operator/foo-bundle:v0.2.0",
},
{
Image: "test.registry/foo-operator/foo-init-2:v0.2.0",
},
{
Image: "test.registry/foo-operator/foo-init:v0.2.0",
},
{
Name: "other",
Image: "test.registry/foo-operator/foo-other:v0.2.0",
},
{
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.2.0",
},
},
CsvJSON: string(foov2csv),
Objects: []string{string(foov2csv), string(foov2crd)},
Expand Down Expand Up @@ -323,11 +362,11 @@ func TestRender(t *testing.T) {
},
RelatedImages: []declcfg.RelatedImage{
{
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.1.0",
Image: "test.registry/foo-operator/foo-bundle:v0.1.0",
},
{
Image: "test.registry/foo-operator/foo-bundle:v0.1.0",
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.1.0",
},
},
CsvJSON: string(foov1csv),
Expand All @@ -353,12 +392,25 @@ func TestRender(t *testing.T) {
},
RelatedImages: []declcfg.RelatedImage{
{
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.2.0",
Image: "test.registry/foo-operator/foo-2:v0.2.0",
},
{
Image: "test.registry/foo-operator/foo-bundle:v0.2.0",
},
{
Image: "test.registry/foo-operator/foo-init-2:v0.2.0",
},
{
Image: "test.registry/foo-operator/foo-init:v0.2.0",
},
{
Name: "other",
Image: "test.registry/foo-operator/foo-other:v0.2.0",
},
{
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.2.0",
},
},
CsvJSON: string(foov2csv),
Objects: []string{string(foov2csv), string(foov2crd)},
Expand Down Expand Up @@ -392,6 +444,22 @@ func TestRender(t *testing.T) {
property.MustBuildSkips("foo.v0.1.2"),
},
RelatedImages: []declcfg.RelatedImage{
{
Image: "test.registry/foo-operator/foo-2:v0.2.0",
},
{
Image: "test.registry/foo-operator/foo-bundle:v0.2.0",
},
{
Image: "test.registry/foo-operator/foo-init-2:v0.2.0",
},
{
Image: "test.registry/foo-operator/foo-init:v0.2.0",
},
{
Name: "other",
Image: "test.registry/foo-operator/foo-other:v0.2.0",
},
{
Name: "operator",
Image: "test.registry/foo-operator/foo:v0.2.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,28 @@ spec:
skips:
- foo.v0.1.1
- foo.v0.1.2
install:
strategy: deployment
spec:
deployments:
- name: foo-operator
spec:
template:
spec:
initContainers:
- image: test.registry/foo-operator/foo-init:v0.2.0
containers:
- image: test.registry/foo-operator/foo:v0.2.0
- name: foo-operator-2
spec:
template:
spec:
initContainers:
- image: test.registry/foo-operator/foo-init-2:v0.2.0
containers:
- image: test.registry/foo-operator/foo-2:v0.2.0
relatedImages:
- name: operator
image: test.registry/foo-operator/foo:v0.2.0
- name: other
image: test.registry/foo-operator/foo-other:v0.2.0
9 changes: 7 additions & 2 deletions alpha/action/testdata/foo-index-v0.2.0-declcfg/foo/index.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,16 @@ properties:
value: foo.v0.1.2
- type: olm.bundle.object
value:
data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsib2xtLnNraXBSYW5nZSI6Ilx1MDAzYzAuMi4wIn0sIm5hbWUiOiJmb28udjAuMi4wIn0sInNwZWMiOnsiY3VzdG9tcmVzb3VyY2VkZWZpbml0aW9ucyI6eyJvd25lZCI6W3siZ3JvdXAiOiJ0ZXN0LmZvbyIsImtpbmQiOiJGb28iLCJuYW1lIjoiZm9vcy50ZXN0LmZvbyIsInZlcnNpb24iOiJ2MSJ9XX0sImRpc3BsYXlOYW1lIjoiRm9vIE9wZXJhdG9yIiwicmVsYXRlZEltYWdlcyI6W3siaW1hZ2UiOiJ0ZXN0LnJlZ2lzdHJ5L2Zvby1vcGVyYXRvci9mb286djAuMi4wIiwibmFtZSI6Im9wZXJhdG9yIn1dLCJyZXBsYWNlcyI6ImZvby52MC4xLjAiLCJza2lwcyI6WyJmb28udjAuMS4xIiwiZm9vLnYwLjEuMiJdLCJ2ZXJzaW9uIjoiMC4yLjAifX0=
data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsib2xtLnNraXBSYW5nZSI6Ilx1MDAzYzAuMi4wIn0sIm5hbWUiOiJmb28udjAuMi4wIn0sInNwZWMiOnsiY3VzdG9tcmVzb3VyY2VkZWZpbml0aW9ucyI6eyJvd25lZCI6W3siZ3JvdXAiOiJ0ZXN0LmZvbyIsImtpbmQiOiJGb28iLCJuYW1lIjoiZm9vcy50ZXN0LmZvbyIsInZlcnNpb24iOiJ2MSJ9XX0sImRpc3BsYXlOYW1lIjoiRm9vIE9wZXJhdG9yIiwiaW5zdGFsbCI6eyJzcGVjIjp7ImRlcGxveW1lbnRzIjpbeyJuYW1lIjoiZm9vLW9wZXJhdG9yIiwic3BlYyI6eyJ0ZW1wbGF0ZSI6eyJzcGVjIjp7ImNvbnRhaW5lcnMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vOnYwLjIuMCJ9XSwiaW5pdENvbnRhaW5lcnMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vLWluaXQ6djAuMi4wIn1dfX19fSx7Im5hbWUiOiJmb28tb3BlcmF0b3ItMiIsInNwZWMiOnsidGVtcGxhdGUiOnsic3BlYyI6eyJjb250YWluZXJzIjpbeyJpbWFnZSI6InRlc3QucmVnaXN0cnkvZm9vLW9wZXJhdG9yL2Zvby0yOnYwLjIuMCJ9XSwiaW5pdENvbnRhaW5lcnMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vLWluaXQtMjp2MC4yLjAifV19fX19XX0sInN0cmF0ZWd5IjoiZGVwbG95bWVudCJ9LCJyZWxhdGVkSW1hZ2VzIjpbeyJpbWFnZSI6InRlc3QucmVnaXN0cnkvZm9vLW9wZXJhdG9yL2Zvbzp2MC4yLjAiLCJuYW1lIjoib3BlcmF0b3IifSx7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vLW90aGVyOnYwLjIuMCIsIm5hbWUiOiJvdGhlciJ9XSwicmVwbGFjZXMiOiJmb28udjAuMS4wIiwic2tpcHMiOlsiZm9vLnYwLjEuMSIsImZvby52MC4xLjIiXSwidmVyc2lvbiI6IjAuMi4wIn19
- type: olm.bundle.object
value:
data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsibmFtZSI6ImZvb3MudGVzdC5mb28ifSwic3BlYyI6eyJncm91cCI6InRlc3QuZm9vIiwibmFtZXMiOnsia2luZCI6IkZvbyIsInBsdXJhbCI6ImZvb3MifSwidmVyc2lvbnMiOlt7Im5hbWUiOiJ2MSJ9XX19
relatedImages:
- image: test.registry/foo-operator/foo-2:v0.2.0
- image: test.registry/foo-operator/foo-init-2:v0.2.0
- image: test.registry/foo-operator/foo-init:v0.2.0
- image: test.registry/foo-operator/foo-bundle:v0.2.0
- image: test.registry/foo-operator/foo-other:v0.2.0
name: other
- image: test.registry/foo-operator/foo:v0.2.0
name: operator
- image: test.registry/foo-operator/foo-bundle:v0.2.0

0 comments on commit f5dcf40

Please sign in to comment.