Skip to content

Commit 8ef9403

Browse files
joelanfordankitathomas
authored andcommitted
fix: ensure operator images are included in rendered bundles related images (openshift#771)
Signed-off-by: Joe Lanford <[email protected]> Upstream-repository: operator-registry Upstream-commit: f5dcf40f01b8707194fdde07818c8b440ee010fa
1 parent b99bdbd commit 8ef9403

File tree

7 files changed

+218
-24
lines changed

7 files changed

+218
-24
lines changed

staging/operator-registry/alpha/action/render.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"io/ioutil"
1010
"os"
1111
"path/filepath"
12+
"sort"
1213
"strings"
1314
"sync"
1415

@@ -76,6 +77,13 @@ func (r Render) Run(ctx context.Context) (*declcfg.DeclarativeConfig, error) {
7677
return nil, fmt.Errorf("render reference %q: %w", ref, err)
7778
}
7879
renderBundleObjects(cfg)
80+
81+
for _, b := range cfg.Bundles {
82+
sort.Slice(b.RelatedImages, func(i, j int) bool {
83+
return b.RelatedImages[i].Image < b.RelatedImages[j].Image
84+
})
85+
}
86+
7987
cfgs = append(cfgs, *cfg)
8088
}
8189

@@ -233,6 +241,7 @@ func sqliteToDeclcfg(ctx context.Context, dbFile string) (*declcfg.DeclarativeCo
233241
if err := populateDBRelatedImages(ctx, &cfg, db); err != nil {
234242
return nil, err
235243
}
244+
236245
return &cfg, nil
237246
}
238247

@@ -322,6 +331,33 @@ func getRelatedImages(b *registry.Bundle) ([]declcfg.RelatedImage, error) {
322331
if err = json.Unmarshal(*rawValue, &relatedImages); err != nil {
323332
return nil, err
324333
}
334+
335+
// Keep track of the images we've already found, so that we don't add
336+
// them multiple times.
337+
allImages := sets.NewString()
338+
for _, ri := range relatedImages {
339+
allImages = allImages.Insert(ri.Image)
340+
}
341+
342+
if !allImages.Has(b.BundleImage) {
343+
relatedImages = append(relatedImages, declcfg.RelatedImage{
344+
Image: b.BundleImage,
345+
})
346+
}
347+
348+
opImages, err := csv.GetOperatorImages()
349+
if err != nil {
350+
return nil, err
351+
}
352+
for img := range opImages {
353+
if !allImages.Has(img) {
354+
relatedImages = append(relatedImages, declcfg.RelatedImage{
355+
Image: img,
356+
})
357+
}
358+
allImages = allImages.Insert(img)
359+
}
360+
325361
return relatedImages, nil
326362
}
327363

staging/operator-registry/alpha/action/render_test.go

Lines changed: 88 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -101,11 +101,11 @@ func TestRender(t *testing.T) {
101101
},
102102
RelatedImages: []declcfg.RelatedImage{
103103
{
104-
Name: "operator",
105-
Image: "test.registry/foo-operator/foo:v0.1.0",
104+
Image: "test.registry/foo-operator/foo-bundle:v0.1.0",
106105
},
107106
{
108-
Image: "test.registry/foo-operator/foo-bundle:v0.1.0",
107+
Name: "operator",
108+
Image: "test.registry/foo-operator/foo:v0.1.0",
109109
},
110110
},
111111
CsvJSON: string(foov1csv),
@@ -126,12 +126,25 @@ func TestRender(t *testing.T) {
126126
},
127127
RelatedImages: []declcfg.RelatedImage{
128128
{
129-
Name: "operator",
130-
Image: "test.registry/foo-operator/foo:v0.2.0",
129+
Image: "test.registry/foo-operator/foo-2:v0.2.0",
131130
},
132131
{
133132
Image: "test.registry/foo-operator/foo-bundle:v0.2.0",
134133
},
134+
{
135+
Image: "test.registry/foo-operator/foo-init-2:v0.2.0",
136+
},
137+
{
138+
Image: "test.registry/foo-operator/foo-init:v0.2.0",
139+
},
140+
{
141+
Name: "other",
142+
Image: "test.registry/foo-operator/foo-other:v0.2.0",
143+
},
144+
{
145+
Name: "operator",
146+
Image: "test.registry/foo-operator/foo:v0.2.0",
147+
},
135148
},
136149
CsvJSON: string(foov2csv),
137150
Objects: []string{string(foov2csv), string(foov2crd)},
@@ -180,11 +193,11 @@ func TestRender(t *testing.T) {
180193
},
181194
RelatedImages: []declcfg.RelatedImage{
182195
{
183-
Name: "operator",
184-
Image: "test.registry/foo-operator/foo:v0.1.0",
196+
Image: "test.registry/foo-operator/foo-bundle:v0.1.0",
185197
},
186198
{
187-
Image: "test.registry/foo-operator/foo-bundle:v0.1.0",
199+
Name: "operator",
200+
Image: "test.registry/foo-operator/foo:v0.1.0",
188201
},
189202
},
190203
CsvJSON: string(foov1csv),
@@ -205,12 +218,25 @@ func TestRender(t *testing.T) {
205218
},
206219
RelatedImages: []declcfg.RelatedImage{
207220
{
208-
Name: "operator",
209-
Image: "test.registry/foo-operator/foo:v0.2.0",
221+
Image: "test.registry/foo-operator/foo-2:v0.2.0",
210222
},
211223
{
212224
Image: "test.registry/foo-operator/foo-bundle:v0.2.0",
213225
},
226+
{
227+
Image: "test.registry/foo-operator/foo-init-2:v0.2.0",
228+
},
229+
{
230+
Image: "test.registry/foo-operator/foo-init:v0.2.0",
231+
},
232+
{
233+
Name: "other",
234+
Image: "test.registry/foo-operator/foo-other:v0.2.0",
235+
},
236+
{
237+
Name: "operator",
238+
Image: "test.registry/foo-operator/foo:v0.2.0",
239+
},
214240
},
215241
CsvJSON: string(foov2csv),
216242
Objects: []string{string(foov2csv), string(foov2crd)},
@@ -258,11 +284,11 @@ func TestRender(t *testing.T) {
258284
},
259285
RelatedImages: []declcfg.RelatedImage{
260286
{
261-
Name: "operator",
262-
Image: "test.registry/foo-operator/foo:v0.1.0",
287+
Image: "test.registry/foo-operator/foo-bundle:v0.1.0",
263288
},
264289
{
265-
Image: "test.registry/foo-operator/foo-bundle:v0.1.0",
290+
Name: "operator",
291+
Image: "test.registry/foo-operator/foo:v0.1.0",
266292
},
267293
},
268294
CsvJSON: string(foov1csv),
@@ -283,12 +309,25 @@ func TestRender(t *testing.T) {
283309
},
284310
RelatedImages: []declcfg.RelatedImage{
285311
{
286-
Name: "operator",
287-
Image: "test.registry/foo-operator/foo:v0.2.0",
312+
Image: "test.registry/foo-operator/foo-2:v0.2.0",
288313
},
289314
{
290315
Image: "test.registry/foo-operator/foo-bundle:v0.2.0",
291316
},
317+
{
318+
Image: "test.registry/foo-operator/foo-init-2:v0.2.0",
319+
},
320+
{
321+
Image: "test.registry/foo-operator/foo-init:v0.2.0",
322+
},
323+
{
324+
Name: "other",
325+
Image: "test.registry/foo-operator/foo-other:v0.2.0",
326+
},
327+
{
328+
Name: "operator",
329+
Image: "test.registry/foo-operator/foo:v0.2.0",
330+
},
292331
},
293332
CsvJSON: string(foov2csv),
294333
Objects: []string{string(foov2csv), string(foov2crd)},
@@ -336,11 +375,11 @@ func TestRender(t *testing.T) {
336375
},
337376
RelatedImages: []declcfg.RelatedImage{
338377
{
339-
Name: "operator",
340-
Image: "test.registry/foo-operator/foo:v0.1.0",
378+
Image: "test.registry/foo-operator/foo-bundle:v0.1.0",
341379
},
342380
{
343-
Image: "test.registry/foo-operator/foo-bundle:v0.1.0",
381+
Name: "operator",
382+
Image: "test.registry/foo-operator/foo:v0.1.0",
344383
},
345384
},
346385
CsvJSON: string(foov1csv),
@@ -361,12 +400,25 @@ func TestRender(t *testing.T) {
361400
},
362401
RelatedImages: []declcfg.RelatedImage{
363402
{
364-
Name: "operator",
365-
Image: "test.registry/foo-operator/foo:v0.2.0",
403+
Image: "test.registry/foo-operator/foo-2:v0.2.0",
366404
},
367405
{
368406
Image: "test.registry/foo-operator/foo-bundle:v0.2.0",
369407
},
408+
{
409+
Image: "test.registry/foo-operator/foo-init-2:v0.2.0",
410+
},
411+
{
412+
Image: "test.registry/foo-operator/foo-init:v0.2.0",
413+
},
414+
{
415+
Name: "other",
416+
Image: "test.registry/foo-operator/foo-other:v0.2.0",
417+
},
418+
{
419+
Name: "operator",
420+
Image: "test.registry/foo-operator/foo:v0.2.0",
421+
},
370422
},
371423
CsvJSON: string(foov2csv),
372424
Objects: []string{string(foov2csv), string(foov2crd)},
@@ -395,6 +447,22 @@ func TestRender(t *testing.T) {
395447
property.MustBuildPackageRequired("bar", "<0.1.0"),
396448
},
397449
RelatedImages: []declcfg.RelatedImage{
450+
{
451+
Image: "test.registry/foo-operator/foo-2:v0.2.0",
452+
},
453+
{
454+
Image: "test.registry/foo-operator/foo-bundle:v0.2.0",
455+
},
456+
{
457+
Image: "test.registry/foo-operator/foo-init-2:v0.2.0",
458+
},
459+
{
460+
Image: "test.registry/foo-operator/foo-init:v0.2.0",
461+
},
462+
{
463+
Name: "other",
464+
Image: "test.registry/foo-operator/foo-other:v0.2.0",
465+
},
398466
{
399467
Name: "operator",
400468
Image: "test.registry/foo-operator/foo:v0.2.0",

staging/operator-registry/alpha/action/testdata/foo-bundle-v0.2.0/manifests/foo.v0.2.0.csv.yaml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,28 @@ spec:
1818
skips:
1919
- foo.v0.1.1
2020
- foo.v0.1.2
21+
install:
22+
strategy: deployment
23+
spec:
24+
deployments:
25+
- name: foo-operator
26+
spec:
27+
template:
28+
spec:
29+
initContainers:
30+
- image: test.registry/foo-operator/foo-init:v0.2.0
31+
containers:
32+
- image: test.registry/foo-operator/foo:v0.2.0
33+
- name: foo-operator-2
34+
spec:
35+
template:
36+
spec:
37+
initContainers:
38+
- image: test.registry/foo-operator/foo-init-2:v0.2.0
39+
containers:
40+
- image: test.registry/foo-operator/foo-2:v0.2.0
2141
relatedImages:
2242
- name: operator
2343
image: test.registry/foo-operator/foo:v0.2.0
44+
- name: other
45+
image: test.registry/foo-operator/foo-other:v0.2.0

staging/operator-registry/alpha/action/testdata/foo-index-v0.2.0-declcfg/foo/index.yaml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,16 @@ properties:
8686
versionRange: <0.1.0
8787
- type: olm.bundle.object
8888
value:
89-
data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsib2xtLnNraXBSYW5nZSI6Ilx1MDAzYzAuMi4wIn0sIm5hbWUiOiJmb28udjAuMi4wIn0sInNwZWMiOnsiY3VzdG9tcmVzb3VyY2VkZWZpbml0aW9ucyI6eyJvd25lZCI6W3siZ3JvdXAiOiJ0ZXN0LmZvbyIsImtpbmQiOiJGb28iLCJuYW1lIjoiZm9vcy50ZXN0LmZvbyIsInZlcnNpb24iOiJ2MSJ9XX0sImRpc3BsYXlOYW1lIjoiRm9vIE9wZXJhdG9yIiwicmVsYXRlZEltYWdlcyI6W3siaW1hZ2UiOiJ0ZXN0LnJlZ2lzdHJ5L2Zvby1vcGVyYXRvci9mb286djAuMi4wIiwibmFtZSI6Im9wZXJhdG9yIn1dLCJyZXBsYWNlcyI6ImZvby52MC4xLjAiLCJza2lwcyI6WyJmb28udjAuMS4xIiwiZm9vLnYwLjEuMiJdLCJ2ZXJzaW9uIjoiMC4yLjAifX0=
89+
data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsib2xtLnNraXBSYW5nZSI6Ilx1MDAzYzAuMi4wIn0sIm5hbWUiOiJmb28udjAuMi4wIn0sInNwZWMiOnsiY3VzdG9tcmVzb3VyY2VkZWZpbml0aW9ucyI6eyJvd25lZCI6W3siZ3JvdXAiOiJ0ZXN0LmZvbyIsImtpbmQiOiJGb28iLCJuYW1lIjoiZm9vcy50ZXN0LmZvbyIsInZlcnNpb24iOiJ2MSJ9XX0sImRpc3BsYXlOYW1lIjoiRm9vIE9wZXJhdG9yIiwiaW5zdGFsbCI6eyJzcGVjIjp7ImRlcGxveW1lbnRzIjpbeyJuYW1lIjoiZm9vLW9wZXJhdG9yIiwic3BlYyI6eyJ0ZW1wbGF0ZSI6eyJzcGVjIjp7ImNvbnRhaW5lcnMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vOnYwLjIuMCJ9XSwiaW5pdENvbnRhaW5lcnMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vLWluaXQ6djAuMi4wIn1dfX19fSx7Im5hbWUiOiJmb28tb3BlcmF0b3ItMiIsInNwZWMiOnsidGVtcGxhdGUiOnsic3BlYyI6eyJjb250YWluZXJzIjpbeyJpbWFnZSI6InRlc3QucmVnaXN0cnkvZm9vLW9wZXJhdG9yL2Zvby0yOnYwLjIuMCJ9XSwiaW5pdENvbnRhaW5lcnMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vLWluaXQtMjp2MC4yLjAifV19fX19XX0sInN0cmF0ZWd5IjoiZGVwbG95bWVudCJ9LCJyZWxhdGVkSW1hZ2VzIjpbeyJpbWFnZSI6InRlc3QucmVnaXN0cnkvZm9vLW9wZXJhdG9yL2Zvbzp2MC4yLjAiLCJuYW1lIjoib3BlcmF0b3IifSx7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vLW90aGVyOnYwLjIuMCIsIm5hbWUiOiJvdGhlciJ9XSwicmVwbGFjZXMiOiJmb28udjAuMS4wIiwic2tpcHMiOlsiZm9vLnYwLjEuMSIsImZvby52MC4xLjIiXSwidmVyc2lvbiI6IjAuMi4wIn19
9090
- type: olm.bundle.object
9191
value:
9292
data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsibmFtZSI6ImZvb3MudGVzdC5mb28ifSwic3BlYyI6eyJncm91cCI6InRlc3QuZm9vIiwibmFtZXMiOnsia2luZCI6IkZvbyIsInBsdXJhbCI6ImZvb3MifSwidmVyc2lvbnMiOlt7Im5hbWUiOiJ2MSJ9XX19
9393
relatedImages:
94+
- image: test.registry/foo-operator/foo-2:v0.2.0
95+
- image: test.registry/foo-operator/foo-init-2:v0.2.0
96+
- image: test.registry/foo-operator/foo-init:v0.2.0
97+
- image: test.registry/foo-operator/foo-bundle:v0.2.0
98+
- image: test.registry/foo-operator/foo-other:v0.2.0
99+
name: other
94100
- image: test.registry/foo-operator/foo:v0.2.0
95101
name: operator
96-
- image: test.registry/foo-operator/foo-bundle:v0.2.0

vendor/github.com/operator-framework/operator-registry/alpha/action/render.go

Lines changed: 36 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/operator-framework/operator-registry/alpha/action/testdata/foo-bundle-v0.2.0/manifests/foo.v0.2.0.csv.yaml

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)