Skip to content

Commit 825b5f7

Browse files
authored
Merge 9c782fc into 7629c6f
2 parents 7629c6f + 9c782fc commit 825b5f7

19 files changed

+1038
-222
lines changed

alpha/action/migrate.go

Lines changed: 2 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package action
22

33
import (
4-
"bytes"
54
"context"
65
"fmt"
7-
"io"
86
"io/ioutil"
97
"os"
10-
"path/filepath"
118

129
"github.com/operator-framework/operator-registry/alpha/declcfg"
1310
"github.com/operator-framework/operator-registry/pkg/image"
@@ -17,13 +14,11 @@ type Migrate struct {
1714
CatalogRef string
1815
OutputDir string
1916

20-
WriteFunc WriteFunc
17+
WriteFunc declcfg.WriteFunc
2118
FileExt string
2219
Registry image.Registry
2320
}
2421

25-
type WriteFunc func(config declcfg.DeclarativeConfig, w io.Writer) error
26-
2722
func (m Migrate) Run(ctx context.Context) error {
2823
entries, err := ioutil.ReadDir(m.OutputDir)
2924
if err != nil && !os.IsNotExist(err) {
@@ -52,48 +47,5 @@ func (m Migrate) Run(ctx context.Context) error {
5247
return fmt.Errorf("render catalog image: %w", err)
5348
}
5449

55-
return writeToFS(*cfg, m.OutputDir, m.WriteFunc, m.FileExt)
56-
}
57-
58-
func writeToFS(cfg declcfg.DeclarativeConfig, rootDir string, writeFunc WriteFunc, fileExt string) error {
59-
channelsByPackage := map[string][]declcfg.Channel{}
60-
for _, c := range cfg.Channels {
61-
channelsByPackage[c.Package] = append(channelsByPackage[c.Package], c)
62-
}
63-
bundlesByPackage := map[string][]declcfg.Bundle{}
64-
for _, b := range cfg.Bundles {
65-
bundlesByPackage[b.Package] = append(bundlesByPackage[b.Package], b)
66-
}
67-
68-
if err := os.MkdirAll(rootDir, 0777); err != nil {
69-
return err
70-
}
71-
72-
for _, p := range cfg.Packages {
73-
fcfg := declcfg.DeclarativeConfig{
74-
Packages: []declcfg.Package{p},
75-
Channels: channelsByPackage[p.Name],
76-
Bundles: bundlesByPackage[p.Name],
77-
}
78-
pkgDir := filepath.Join(rootDir, p.Name)
79-
if err := os.MkdirAll(pkgDir, 0777); err != nil {
80-
return err
81-
}
82-
filename := filepath.Join(pkgDir, fmt.Sprintf("catalog%s", fileExt))
83-
if err := writeFile(fcfg, filename, writeFunc); err != nil {
84-
return err
85-
}
86-
}
87-
return nil
88-
}
89-
90-
func writeFile(cfg declcfg.DeclarativeConfig, filename string, writeFunc WriteFunc) error {
91-
buf := &bytes.Buffer{}
92-
if err := writeFunc(cfg, buf); err != nil {
93-
return fmt.Errorf("write to buffer for %q: %v", filename, err)
94-
}
95-
if err := ioutil.WriteFile(filename, buf.Bytes(), 0666); err != nil {
96-
return fmt.Errorf("write file %q: %v", filename, err)
97-
}
98-
return nil
50+
return declcfg.WriteFS(*cfg, m.OutputDir, m.WriteFunc, m.FileExt)
9951
}

alpha/action/migrate_test.go

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package action_test
22

33
import (
44
"context"
5-
"fmt"
65
"io/fs"
76
"os"
87
"path/filepath"
@@ -111,7 +110,6 @@ func TestMigrate(t *testing.T) {
111110
path := filepath.Join(s.migrate.OutputDir, file)
112111
actualData, err := os.ReadFile(path)
113112
require.NoError(t, err)
114-
fmt.Println(string(actualData))
115113
require.Equal(t, expectedData, string(actualData))
116114
}
117115
})
@@ -212,12 +210,18 @@ properties:
212210
value:
213211
packageName: bar
214212
versionRange: <0.1.0
215-
- type: olm.bundle.object
213+
- type: olm.csv.metadata
216214
value:
217-
data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsib2xtLnNraXBSYW5nZSI6Ilx1MDAzYzAuMS4wIn0sIm5hbWUiOiJmb28udjAuMS4wIn0sInNwZWMiOnsiY3VzdG9tcmVzb3VyY2VkZWZpbml0aW9ucyI6eyJvd25lZCI6W3siZ3JvdXAiOiJ0ZXN0LmZvbyIsImtpbmQiOiJGb28iLCJuYW1lIjoiZm9vcy50ZXN0LmZvbyIsInZlcnNpb24iOiJ2MSJ9XX0sImRpc3BsYXlOYW1lIjoiRm9vIE9wZXJhdG9yIiwicmVsYXRlZEltYWdlcyI6W3siaW1hZ2UiOiJ0ZXN0LnJlZ2lzdHJ5L2Zvby1vcGVyYXRvci9mb286djAuMS4wIiwibmFtZSI6Im9wZXJhdG9yIn1dLCJ2ZXJzaW9uIjoiMC4xLjAifX0=
218-
- type: olm.bundle.object
219-
value:
220-
data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsibmFtZSI6ImZvb3MudGVzdC5mb28ifSwic3BlYyI6eyJncm91cCI6InRlc3QuZm9vIiwibmFtZXMiOnsia2luZCI6IkZvbyIsInBsdXJhbCI6ImZvb3MifSwidmVyc2lvbnMiOlt7Im5hbWUiOiJ2MSJ9XX19
215+
annotations:
216+
olm.skipRange: <0.1.0
217+
apiServiceDefinitions: {}
218+
crdDescriptions:
219+
owned:
220+
- kind: Foo
221+
name: foos.test.foo
222+
version: v1
223+
displayName: Foo Operator
224+
provider: {}
221225
relatedImages:
222226
- image: test.registry/foo-operator/foo-bundle:v0.1.0
223227
name: ""
@@ -247,12 +251,18 @@ properties:
247251
value:
248252
packageName: bar
249253
versionRange: <0.1.0
250-
- type: olm.bundle.object
251-
value:
252-
data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsib2xtLnNraXBSYW5nZSI6Ilx1MDAzYzAuMi4wIn0sIm5hbWUiOiJmb28udjAuMi4wIn0sInNwZWMiOnsiY3VzdG9tcmVzb3VyY2VkZWZpbml0aW9ucyI6eyJvd25lZCI6W3siZ3JvdXAiOiJ0ZXN0LmZvbyIsImtpbmQiOiJGb28iLCJuYW1lIjoiZm9vcy50ZXN0LmZvbyIsInZlcnNpb24iOiJ2MSJ9XX0sImRpc3BsYXlOYW1lIjoiRm9vIE9wZXJhdG9yIiwiaW5zdGFsbCI6eyJzcGVjIjp7ImRlcGxveW1lbnRzIjpbeyJuYW1lIjoiZm9vLW9wZXJhdG9yIiwic3BlYyI6eyJ0ZW1wbGF0ZSI6eyJzcGVjIjp7ImNvbnRhaW5lcnMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vOnYwLjIuMCJ9XSwiaW5pdENvbnRhaW5lcnMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vLWluaXQ6djAuMi4wIn1dfX19fSx7Im5hbWUiOiJmb28tb3BlcmF0b3ItMiIsInNwZWMiOnsidGVtcGxhdGUiOnsic3BlYyI6eyJjb250YWluZXJzIjpbeyJpbWFnZSI6InRlc3QucmVnaXN0cnkvZm9vLW9wZXJhdG9yL2Zvby0yOnYwLjIuMCJ9XSwiaW5pdENvbnRhaW5lcnMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vLWluaXQtMjp2MC4yLjAifV19fX19XX0sInN0cmF0ZWd5IjoiZGVwbG95bWVudCJ9LCJyZWxhdGVkSW1hZ2VzIjpbeyJpbWFnZSI6InRlc3QucmVnaXN0cnkvZm9vLW9wZXJhdG9yL2Zvbzp2MC4yLjAiLCJuYW1lIjoib3BlcmF0b3IifSx7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vLW90aGVyOnYwLjIuMCIsIm5hbWUiOiJvdGhlciJ9XSwicmVwbGFjZXMiOiJmb28udjAuMS4wIiwic2tpcHMiOlsiZm9vLnYwLjEuMSIsImZvby52MC4xLjIiXSwidmVyc2lvbiI6IjAuMi4wIn19
253-
- type: olm.bundle.object
254+
- type: olm.csv.metadata
254255
value:
255-
data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsibmFtZSI6ImZvb3MudGVzdC5mb28ifSwic3BlYyI6eyJncm91cCI6InRlc3QuZm9vIiwibmFtZXMiOnsia2luZCI6IkZvbyIsInBsdXJhbCI6ImZvb3MifSwidmVyc2lvbnMiOlt7Im5hbWUiOiJ2MSJ9XX19
256+
annotations:
257+
olm.skipRange: <0.2.0
258+
apiServiceDefinitions: {}
259+
crdDescriptions:
260+
owned:
261+
- kind: Foo
262+
name: foos.test.foo
263+
version: v1
264+
displayName: Foo Operator
265+
provider: {}
256266
relatedImages:
257267
- image: test.registry/foo-operator/foo-2:v0.2.0
258268
name: ""
@@ -299,12 +309,15 @@ properties:
299309
value:
300310
packageName: bar
301311
version: 0.1.0
302-
- type: olm.bundle.object
312+
- type: olm.csv.metadata
303313
value:
304-
data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsibmFtZSI6ImJhci52MC4xLjAifSwic3BlYyI6eyJjdXN0b21yZXNvdXJjZWRlZmluaXRpb25zIjp7Im93bmVkIjpbeyJncm91cCI6InRlc3QuYmFyIiwia2luZCI6IkJhciIsIm5hbWUiOiJiYXJzLnRlc3QuYmFyIiwidmVyc2lvbiI6InYxYWxwaGExIn1dfSwicmVsYXRlZEltYWdlcyI6W3siaW1hZ2UiOiJ0ZXN0LnJlZ2lzdHJ5L2Jhci1vcGVyYXRvci9iYXI6djAuMS4wIiwibmFtZSI6Im9wZXJhdG9yIn1dLCJ2ZXJzaW9uIjoiMC4xLjAifX0=
305-
- type: olm.bundle.object
306-
value:
307-
data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsibmFtZSI6ImJhcnMudGVzdC5iYXIifSwic3BlYyI6eyJncm91cCI6InRlc3QuYmFyIiwibmFtZXMiOnsia2luZCI6IkJhciIsInBsdXJhbCI6ImJhcnMifSwidmVyc2lvbnMiOlt7Im5hbWUiOiJ2MWFscGhhMSJ9XX19
314+
apiServiceDefinitions: {}
315+
crdDescriptions:
316+
owned:
317+
- kind: Bar
318+
name: bars.test.bar
319+
version: v1alpha1
320+
provider: {}
308321
relatedImages:
309322
- image: test.registry/bar-operator/bar-bundle:v0.1.0
310323
name: ""
@@ -325,12 +338,17 @@ properties:
325338
value:
326339
packageName: bar
327340
version: 0.2.0
328-
- type: olm.bundle.object
329-
value:
330-
data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsib2xtLnNraXBSYW5nZSI6Ilx1MDAzYzAuMi4wIn0sIm5hbWUiOiJiYXIudjAuMi4wIn0sInNwZWMiOnsiY3VzdG9tcmVzb3VyY2VkZWZpbml0aW9ucyI6eyJvd25lZCI6W3siZ3JvdXAiOiJ0ZXN0LmJhciIsImtpbmQiOiJCYXIiLCJuYW1lIjoiYmFycy50ZXN0LmJhciIsInZlcnNpb24iOiJ2MWFscGhhMSJ9XX0sInJlbGF0ZWRJbWFnZXMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9iYXItb3BlcmF0b3IvYmFyOnYwLjIuMCIsIm5hbWUiOiJvcGVyYXRvciJ9XSwic2tpcHMiOlsiYmFyLnYwLjEuMCJdLCJ2ZXJzaW9uIjoiMC4yLjAifX0=
331-
- type: olm.bundle.object
341+
- type: olm.csv.metadata
332342
value:
333-
data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsibmFtZSI6ImJhcnMudGVzdC5iYXIifSwic3BlYyI6eyJncm91cCI6InRlc3QuYmFyIiwibmFtZXMiOnsia2luZCI6IkJhciIsInBsdXJhbCI6ImJhcnMifSwidmVyc2lvbnMiOlt7Im5hbWUiOiJ2MWFscGhhMSJ9XX19
343+
annotations:
344+
olm.skipRange: <0.2.0
345+
apiServiceDefinitions: {}
346+
crdDescriptions:
347+
owned:
348+
- kind: Bar
349+
name: bars.test.bar
350+
version: v1alpha1
351+
provider: {}
334352
relatedImages:
335353
- image: test.registry/bar-operator/bar-bundle:v0.2.0
336354
name: ""

alpha/action/render.go

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ func (r Render) Run(ctx context.Context) (*declcfg.DeclarativeConfig, error) {
8282
if err != nil {
8383
return nil, fmt.Errorf("render reference %q: %w", ref, err)
8484
}
85-
renderBundleObjects(cfg)
85+
moveBundleObjectsToEndOfPropertySlices(cfg)
8686

8787
for _, b := range cfg.Bundles {
8888
sort.Slice(b.RelatedImages, func(i, j int) bool {
@@ -304,6 +304,7 @@ func bundleToDeclcfg(bundle *registry.Bundle) (*declcfg.DeclarativeConfig, error
304304
if err != nil {
305305
return nil, fmt.Errorf("get related images for bundle %q: %v", bundle.Name, err)
306306
}
307+
307308
var csvJson []byte
308309
for _, obj := range bundle.Objects {
309310
if obj.GetKind() == "ClusterServiceVersion" {
@@ -376,19 +377,21 @@ func getRelatedImages(b *registry.Bundle) ([]declcfg.RelatedImage, error) {
376377
return relatedImages, nil
377378
}
378379

379-
func renderBundleObjects(cfg *declcfg.DeclarativeConfig) {
380+
func moveBundleObjectsToEndOfPropertySlices(cfg *declcfg.DeclarativeConfig) {
380381
for bi, b := range cfg.Bundles {
381-
props := b.Properties[:0]
382+
var (
383+
others []property.Property
384+
objs []property.Property
385+
)
382386
for _, p := range b.Properties {
383-
if p.Type != property.TypeBundleObject {
384-
props = append(props, p)
387+
switch p.Type {
388+
case property.TypeBundleObject, property.TypeCSVMetadata:
389+
objs = append(objs, p)
390+
default:
391+
others = append(others, p)
385392
}
386393
}
387-
388-
for _, obj := range b.Objects {
389-
props = append(props, property.MustBuildBundleObjectData([]byte(obj)))
390-
}
391-
cfg.Bundles[bi].Properties = props
394+
cfg.Bundles[bi].Properties = append(others, objs...)
392395
}
393396
}
394397

alpha/action/render_test.go

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
package action_test
22

33
import (
4+
"bytes"
45
"context"
56
"embed"
67
"encoding/json"
78
"errors"
9+
"io"
810
"io/fs"
911
"os"
1012
"path/filepath"
1113
"testing"
1214
"testing/fstest"
1315

16+
"github.com/operator-framework/api/pkg/operators/v1alpha1"
1417
"github.com/stretchr/testify/assert"
1518
"github.com/stretchr/testify/require"
1619
"k8s.io/apimachinery/pkg/util/yaml"
@@ -105,8 +108,7 @@ func TestRender(t *testing.T) {
105108
property.MustBuildGVKRequired("test.bar", "v1alpha1", "Bar"),
106109
property.MustBuildPackage("foo", "0.1.0"),
107110
property.MustBuildPackageRequired("bar", "<0.1.0"),
108-
property.MustBuildBundleObjectData(foov1csv),
109-
property.MustBuildBundleObjectData(foov1crd),
111+
mustBuildCSVMetadata(bytes.NewReader(foov1csv)),
110112
},
111113
RelatedImages: []declcfg.RelatedImage{
112114
{
@@ -130,8 +132,7 @@ func TestRender(t *testing.T) {
130132
property.MustBuildGVKRequired("test.bar", "v1alpha1", "Bar"),
131133
property.MustBuildPackage("foo", "0.2.0"),
132134
property.MustBuildPackageRequired("bar", "<0.1.0"),
133-
property.MustBuildBundleObjectData(foov2csv),
134-
property.MustBuildBundleObjectData(foov2crd),
135+
mustBuildCSVMetadata(bytes.NewReader(foov2csv)),
135136
},
136137
RelatedImages: []declcfg.RelatedImage{
137138
{
@@ -197,8 +198,7 @@ func TestRender(t *testing.T) {
197198
property.MustBuildGVKRequired("test.bar", "v1alpha1", "Bar"),
198199
property.MustBuildPackage("foo", "0.1.0"),
199200
property.MustBuildPackageRequired("bar", "<0.1.0"),
200-
property.MustBuildBundleObjectData(foov1csv),
201-
property.MustBuildBundleObjectData(foov1crd),
201+
mustBuildCSVMetadata(bytes.NewReader(foov1csv)),
202202
},
203203
RelatedImages: []declcfg.RelatedImage{
204204
{
@@ -222,8 +222,7 @@ func TestRender(t *testing.T) {
222222
property.MustBuildGVKRequired("test.bar", "v1alpha1", "Bar"),
223223
property.MustBuildPackage("foo", "0.2.0"),
224224
property.MustBuildPackageRequired("bar", "<0.1.0"),
225-
property.MustBuildBundleObjectData(foov2csv),
226-
property.MustBuildBundleObjectData(foov2crd),
225+
mustBuildCSVMetadata(bytes.NewReader(foov2csv)),
227226
},
228227
RelatedImages: []declcfg.RelatedImage{
229228
{
@@ -468,8 +467,7 @@ func TestRender(t *testing.T) {
468467
property.MustBuildGVKRequired("test.bar", "v1alpha1", "Bar"),
469468
property.MustBuildPackage("foo", "0.2.0"),
470469
property.MustBuildPackageRequired("bar", "<0.1.0"),
471-
property.MustBuildBundleObjectData(foov2csv),
472-
property.MustBuildBundleObjectData(foov2crd),
470+
mustBuildCSVMetadata(bytes.NewReader(foov2csv)),
473471
},
474472
Objects: []string{string(foov2csv), string(foov2crd)},
475473
CsvJSON: string(foov2csv),
@@ -518,8 +516,7 @@ func TestRender(t *testing.T) {
518516
property.MustBuildGVKRequired("test.bar", "v1alpha1", "Bar"),
519517
property.MustBuildPackage("foo", "0.2.0"),
520518
property.MustBuildPackageRequired("bar", "<0.1.0"),
521-
property.MustBuildBundleObjectData(foov2csvNoRelatedImages),
522-
property.MustBuildBundleObjectData(foov2crdNoRelatedImages),
519+
mustBuildCSVMetadata(bytes.NewReader(foov2csvNoRelatedImages)),
523520
},
524521
Objects: []string{string(foov2csvNoRelatedImages), string(foov2crdNoRelatedImages)},
525522
CsvJSON: string(foov2csvNoRelatedImages),
@@ -551,7 +548,17 @@ func TestRender(t *testing.T) {
551548
t.Run(s.name, func(t *testing.T) {
552549
actualCfg, actualErr := s.render.Run(context.Background())
553550
s.assertion(t, actualErr)
554-
require.Equal(t, s.expectCfg, actualCfg)
551+
require.Equal(t, len(s.expectCfg.Packages), len(actualCfg.Packages))
552+
require.Equal(t, s.expectCfg.Packages, actualCfg.Packages)
553+
require.Equal(t, len(s.expectCfg.Channels), len(actualCfg.Channels))
554+
require.Equal(t, s.expectCfg.Channels, actualCfg.Channels)
555+
require.Equal(t, len(s.expectCfg.Bundles), len(actualCfg.Bundles))
556+
for i := range s.expectCfg.Bundles {
557+
actual, expected := actualCfg.Bundles[i], s.expectCfg.Bundles[i]
558+
require.Equal(t, expected, actual, "bundle %d", i)
559+
}
560+
require.Equal(t, len(s.expectCfg.Others), len(actualCfg.Others))
561+
require.Equal(t, s.expectCfg.Others, actualCfg.Others)
555562
})
556563
}
557564
}
@@ -880,3 +887,11 @@ func generateSqliteFile(path string, imageMap map[image.Reference]string) error
880887
}
881888
return nil
882889
}
890+
891+
func mustBuildCSVMetadata(r io.Reader) property.Property {
892+
var csv v1alpha1.ClusterServiceVersion
893+
if err := json.NewDecoder(r).Decode(&csv); err != nil {
894+
panic(err)
895+
}
896+
return property.MustBuildCSVMetadata(csv)
897+
}

0 commit comments

Comments
 (0)