Skip to content

Commit ae8f50d

Browse files
Merge pull request #851 from grokspawn/bundle-metadata-4.17
OCPBUGS-39458: add optional schema migrations; default to olm.bundle.object instead of olm.csv.metadata (#1384)
2 parents a3a385e + 1d794e4 commit ae8f50d

File tree

35 files changed

+1097
-302
lines changed

35 files changed

+1097
-302
lines changed

Diff for: staging/operator-registry/alpha/action/migrate.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@ import (
55
"fmt"
66
"os"
77

8+
"github.com/operator-framework/operator-registry/alpha/action/migrations"
89
"github.com/operator-framework/operator-registry/alpha/declcfg"
910
"github.com/operator-framework/operator-registry/pkg/image"
1011
)
1112

1213
type Migrate struct {
1314
CatalogRef string
1415
OutputDir string
16+
Migrations *migrations.Migrations
1517

1618
WriteFunc declcfg.WriteFunc
1719
FileExt string
@@ -28,8 +30,8 @@ func (m Migrate) Run(ctx context.Context) error {
2830
}
2931

3032
r := Render{
31-
Refs: []string{m.CatalogRef},
32-
Migrate: true,
33+
Refs: []string{m.CatalogRef},
34+
Migrations: m.Migrations,
3335

3436
// Only allow catalogs to be migrated.
3537
AllowedRefMask: RefSqliteImage | RefSqliteFile | RefDCImage | RefDCDir,

Diff for: staging/operator-registry/alpha/action/migrate_test.go

+55-75
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ func TestMigrate(t *testing.T) {
3131
image.SimpleReference("test.registry/bar-operator/bar-bundle:v0.2.0"): "testdata/bar-bundle-v0.2.0",
3232
}
3333

34-
tmpDir := t.TempDir()
35-
dbFile := filepath.Join(tmpDir, "index.db")
34+
sqliteDBDir := t.TempDir()
35+
dbFile := filepath.Join(sqliteDBDir, "index.db")
3636
err := generateSqliteFile(dbFile, sqliteBundles)
3737
require.NoError(t, err)
3838

@@ -44,7 +44,6 @@ func TestMigrate(t *testing.T) {
4444
name: "SqliteImage/Success",
4545
migrate: action.Migrate{
4646
CatalogRef: "test.registry/migrate/catalog:sqlite",
47-
OutputDir: filepath.Join(tmpDir, "sqlite-image"),
4847
WriteFunc: declcfg.WriteYAML,
4948
FileExt: ".yaml",
5049
Registry: reg,
@@ -58,7 +57,6 @@ func TestMigrate(t *testing.T) {
5857
name: "SqliteFile/Success",
5958
migrate: action.Migrate{
6059
CatalogRef: dbFile,
61-
OutputDir: filepath.Join(tmpDir, "sqlite-file"),
6260
WriteFunc: declcfg.WriteYAML,
6361
FileExt: ".yaml",
6462
Registry: reg,
@@ -72,7 +70,6 @@ func TestMigrate(t *testing.T) {
7270
name: "DeclcfgImage/Success",
7371
migrate: action.Migrate{
7472
CatalogRef: "test.registry/foo-operator/foo-index-declcfg:v0.2.0",
75-
OutputDir: filepath.Join(tmpDir, "declcfg-image"),
7673
WriteFunc: declcfg.WriteYAML,
7774
FileExt: ".yaml",
7875
Registry: reg,
@@ -85,7 +82,6 @@ func TestMigrate(t *testing.T) {
8582
name: "DeclcfgDir/Success",
8683
migrate: action.Migrate{
8784
CatalogRef: "testdata/foo-index-v0.2.0-declcfg",
88-
OutputDir: filepath.Join(tmpDir, "declcfg-dir"),
8985
WriteFunc: declcfg.WriteYAML,
9086
FileExt: ".yaml",
9187
Registry: reg,
@@ -98,16 +94,31 @@ func TestMigrate(t *testing.T) {
9894
name: "BundleImage/Failure",
9995
migrate: action.Migrate{
10096
CatalogRef: "test.registry/foo-operator/foo-bundle:v0.1.0",
101-
OutputDir: filepath.Join(tmpDir, "bundle-image"),
10297
WriteFunc: declcfg.WriteYAML,
10398
FileExt: ".yaml",
10499
Registry: reg,
105100
},
106101
expectErr: action.ErrNotAllowed,
107102
},
103+
{
104+
name: "SqliteImage/Success/NoMigrations",
105+
migrate: action.Migrate{
106+
CatalogRef: "test.registry/migrate/catalog:sqlite",
107+
WriteFunc: declcfg.WriteYAML,
108+
FileExt: ".yaml",
109+
Registry: reg,
110+
Migrations: nil,
111+
},
112+
expectedFiles: map[string]string{
113+
"foo/catalog.yaml": migrateFooCatalogSqlite(),
114+
"bar/catalog.yaml": migrateBarCatalogSqlite(),
115+
},
116+
},
108117
}
109118
for _, s := range specs {
110119
t.Run(s.name, func(t *testing.T) {
120+
s.migrate.OutputDir = t.TempDir()
121+
111122
err := s.migrate.Run(context.Background())
112123
require.ErrorIs(t, err, s.expectErr)
113124
if s.expectErr != nil {
@@ -224,18 +235,12 @@ properties:
224235
value:
225236
packageName: bar
226237
versionRange: <0.1.0
227-
- type: olm.csv.metadata
228-
value:
229-
annotations:
230-
olm.skipRange: <0.1.0
231-
apiServiceDefinitions: {}
232-
crdDescriptions:
233-
owned:
234-
- kind: Foo
235-
name: foos.test.foo
236-
version: v1
237-
displayName: Foo Operator
238-
provider: {}
238+
- type: olm.bundle.object
239+
value:
240+
data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsibmFtZSI6ImZvb3MudGVzdC5mb28ifSwic3BlYyI6eyJncm91cCI6InRlc3QuZm9vIiwibmFtZXMiOnsia2luZCI6IkZvbyIsInBsdXJhbCI6ImZvb3MifSwidmVyc2lvbnMiOlt7Im5hbWUiOiJ2MSJ9XX19
241+
- type: olm.bundle.object
242+
value:
243+
data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsib2xtLnNraXBSYW5nZSI6Ilx1MDAzYzAuMS4wIn0sIm5hbWUiOiJmb28udjAuMS4wIn0sInNwZWMiOnsiY3VzdG9tcmVzb3VyY2VkZWZpbml0aW9ucyI6eyJvd25lZCI6W3siZ3JvdXAiOiJ0ZXN0LmZvbyIsImtpbmQiOiJGb28iLCJuYW1lIjoiZm9vcy50ZXN0LmZvbyIsInZlcnNpb24iOiJ2MSJ9XX0sImRpc3BsYXlOYW1lIjoiRm9vIE9wZXJhdG9yIiwicmVsYXRlZEltYWdlcyI6W3siaW1hZ2UiOiJ0ZXN0LnJlZ2lzdHJ5L2Zvby1vcGVyYXRvci9mb286djAuMS4wIiwibmFtZSI6Im9wZXJhdG9yIn1dLCJ2ZXJzaW9uIjoiMC4xLjAifX0=
239244
relatedImages:
240245
- image: test.registry/foo-operator/foo-bundle:v0.1.0
241246
name: ""
@@ -265,18 +270,12 @@ properties:
265270
value:
266271
packageName: bar
267272
versionRange: <0.1.0
268-
- type: olm.csv.metadata
269-
value:
270-
annotations:
271-
olm.skipRange: <0.2.0
272-
apiServiceDefinitions: {}
273-
crdDescriptions:
274-
owned:
275-
- kind: Foo
276-
name: foos.test.foo
277-
version: v1
278-
displayName: Foo Operator
279-
provider: {}
273+
- type: olm.bundle.object
274+
value:
275+
data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsibmFtZSI6ImZvb3MudGVzdC5mb28ifSwic3BlYyI6eyJncm91cCI6InRlc3QuZm9vIiwibmFtZXMiOnsia2luZCI6IkZvbyIsInBsdXJhbCI6ImZvb3MifSwidmVyc2lvbnMiOlt7Im5hbWUiOiJ2MSJ9XX19
276+
- type: olm.bundle.object
277+
value:
278+
data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsib2xtLnNraXBSYW5nZSI6Ilx1MDAzYzAuMi4wIn0sIm5hbWUiOiJmb28udjAuMi4wIn0sInNwZWMiOnsiY3VzdG9tcmVzb3VyY2VkZWZpbml0aW9ucyI6eyJvd25lZCI6W3siZ3JvdXAiOiJ0ZXN0LmZvbyIsImtpbmQiOiJGb28iLCJuYW1lIjoiZm9vcy50ZXN0LmZvbyIsInZlcnNpb24iOiJ2MSJ9XX0sImRpc3BsYXlOYW1lIjoiRm9vIE9wZXJhdG9yIiwiaW5zdGFsbCI6eyJzcGVjIjp7ImRlcGxveW1lbnRzIjpbeyJuYW1lIjoiZm9vLW9wZXJhdG9yIiwic3BlYyI6eyJ0ZW1wbGF0ZSI6eyJzcGVjIjp7ImNvbnRhaW5lcnMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vOnYwLjIuMCJ9XSwiaW5pdENvbnRhaW5lcnMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vLWluaXQ6djAuMi4wIn1dfX19fSx7Im5hbWUiOiJmb28tb3BlcmF0b3ItMiIsInNwZWMiOnsidGVtcGxhdGUiOnsic3BlYyI6eyJjb250YWluZXJzIjpbeyJpbWFnZSI6InRlc3QucmVnaXN0cnkvZm9vLW9wZXJhdG9yL2Zvby0yOnYwLjIuMCJ9XSwiaW5pdENvbnRhaW5lcnMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vLWluaXQtMjp2MC4yLjAifV19fX19XX0sInN0cmF0ZWd5IjoiZGVwbG95bWVudCJ9LCJyZWxhdGVkSW1hZ2VzIjpbeyJpbWFnZSI6InRlc3QucmVnaXN0cnkvZm9vLW9wZXJhdG9yL2Zvbzp2MC4yLjAiLCJuYW1lIjoib3BlcmF0b3IifSx7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vLW90aGVyOnYwLjIuMCIsIm5hbWUiOiJvdGhlciJ9XSwicmVwbGFjZXMiOiJmb28udjAuMS4wIiwic2tpcHMiOlsiZm9vLnYwLjEuMSIsImZvby52MC4xLjIiXSwidmVyc2lvbiI6IjAuMi4wIn19
280279
relatedImages:
281280
- image: test.registry/foo-operator/foo-2:v0.2.0
282281
name: ""
@@ -292,6 +291,7 @@ relatedImages:
292291
name: operator
293292
schema: olm.bundle
294293
`
294+
295295
}
296296

297297
func migrateBarCatalogSqlite() string {
@@ -323,15 +323,12 @@ properties:
323323
value:
324324
packageName: bar
325325
version: 0.1.0
326-
- type: olm.csv.metadata
327-
value:
328-
apiServiceDefinitions: {}
329-
crdDescriptions:
330-
owned:
331-
- kind: Bar
332-
name: bars.test.bar
333-
version: v1alpha1
334-
provider: {}
326+
- type: olm.bundle.object
327+
value:
328+
data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsibmFtZSI6ImJhcnMudGVzdC5iYXIifSwic3BlYyI6eyJncm91cCI6InRlc3QuYmFyIiwibmFtZXMiOnsia2luZCI6IkJhciIsInBsdXJhbCI6ImJhcnMifSwidmVyc2lvbnMiOlt7Im5hbWUiOiJ2MWFscGhhMSJ9XX19
329+
- type: olm.bundle.object
330+
value:
331+
data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsibmFtZSI6ImJhci52MC4xLjAifSwic3BlYyI6eyJjdXN0b21yZXNvdXJjZWRlZmluaXRpb25zIjp7Im93bmVkIjpbeyJncm91cCI6InRlc3QuYmFyIiwia2luZCI6IkJhciIsIm5hbWUiOiJiYXJzLnRlc3QuYmFyIiwidmVyc2lvbiI6InYxYWxwaGExIn1dfSwicmVsYXRlZEltYWdlcyI6W3siaW1hZ2UiOiJ0ZXN0LnJlZ2lzdHJ5L2Jhci1vcGVyYXRvci9iYXI6djAuMS4wIiwibmFtZSI6Im9wZXJhdG9yIn1dLCJ2ZXJzaW9uIjoiMC4xLjAifX0=
335332
relatedImages:
336333
- image: test.registry/bar-operator/bar-bundle:v0.1.0
337334
name: ""
@@ -352,17 +349,12 @@ properties:
352349
value:
353350
packageName: bar
354351
version: 0.2.0
355-
- type: olm.csv.metadata
356-
value:
357-
annotations:
358-
olm.skipRange: <0.2.0
359-
apiServiceDefinitions: {}
360-
crdDescriptions:
361-
owned:
362-
- kind: Bar
363-
name: bars.test.bar
364-
version: v1alpha1
365-
provider: {}
352+
- type: olm.bundle.object
353+
value:
354+
data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsibmFtZSI6ImJhcnMudGVzdC5iYXIifSwic3BlYyI6eyJncm91cCI6InRlc3QuYmFyIiwibmFtZXMiOnsia2luZCI6IkJhciIsInBsdXJhbCI6ImJhcnMifSwidmVyc2lvbnMiOlt7Im5hbWUiOiJ2MWFscGhhMSJ9XX19
355+
- type: olm.bundle.object
356+
value:
357+
data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsib2xtLnNraXBSYW5nZSI6Ilx1MDAzYzAuMi4wIn0sIm5hbWUiOiJiYXIudjAuMi4wIn0sInNwZWMiOnsiY3VzdG9tcmVzb3VyY2VkZWZpbml0aW9ucyI6eyJvd25lZCI6W3siZ3JvdXAiOiJ0ZXN0LmJhciIsImtpbmQiOiJCYXIiLCJuYW1lIjoiYmFycy50ZXN0LmJhciIsInZlcnNpb24iOiJ2MWFscGhhMSJ9XX0sInJlbGF0ZWRJbWFnZXMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9iYXItb3BlcmF0b3IvYmFyOnYwLjIuMCIsIm5hbWUiOiJvcGVyYXRvciJ9XSwic2tpcHMiOlsiYmFyLnYwLjEuMCJdLCJ2ZXJzaW9uIjoiMC4yLjAifX0=
366358
relatedImages:
367359
- image: test.registry/bar-operator/bar-bundle:v0.2.0
368360
name: ""
@@ -434,18 +426,12 @@ properties:
434426
value:
435427
packageName: bar
436428
versionRange: <0.1.0
437-
- type: olm.csv.metadata
438-
value:
439-
annotations:
440-
olm.skipRange: <0.1.0
441-
apiServiceDefinitions: {}
442-
crdDescriptions:
443-
owned:
444-
- kind: Foo
445-
name: foos.test.foo
446-
version: v1
447-
displayName: Foo Operator
448-
provider: {}
429+
- type: olm.bundle.object
430+
value:
431+
data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsib2xtLnNraXBSYW5nZSI6Ilx1MDAzYzAuMS4wIn0sIm5hbWUiOiJmb28udjAuMS4wIn0sInNwZWMiOnsiY3VzdG9tcmVzb3VyY2VkZWZpbml0aW9ucyI6eyJvd25lZCI6W3siZ3JvdXAiOiJ0ZXN0LmZvbyIsImtpbmQiOiJGb28iLCJuYW1lIjoiZm9vcy50ZXN0LmZvbyIsInZlcnNpb24iOiJ2MSJ9XX0sImRpc3BsYXlOYW1lIjoiRm9vIE9wZXJhdG9yIiwicmVsYXRlZEltYWdlcyI6W3siaW1hZ2UiOiJ0ZXN0LnJlZ2lzdHJ5L2Zvby1vcGVyYXRvci9mb286djAuMS4wIiwibmFtZSI6Im9wZXJhdG9yIn1dLCJ2ZXJzaW9uIjoiMC4xLjAifX0=
432+
- type: olm.bundle.object
433+
value:
434+
data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsibmFtZSI6ImZvb3MudGVzdC5mb28ifSwic3BlYyI6eyJncm91cCI6InRlc3QuZm9vIiwibmFtZXMiOnsia2luZCI6IkZvbyIsInBsdXJhbCI6ImZvb3MifSwidmVyc2lvbnMiOlt7Im5hbWUiOiJ2MSJ9XX19
449435
relatedImages:
450436
- image: test.registry/foo-operator/foo-bundle:v0.1.0
451437
name: ""
@@ -475,18 +461,12 @@ properties:
475461
value:
476462
packageName: bar
477463
versionRange: <0.1.0
478-
- type: olm.csv.metadata
479-
value:
480-
annotations:
481-
olm.skipRange: <0.2.0
482-
apiServiceDefinitions: {}
483-
crdDescriptions:
484-
owned:
485-
- kind: Foo
486-
name: foos.test.foo
487-
version: v1
488-
displayName: Foo Operator
489-
provider: {}
464+
- type: olm.bundle.object
465+
value:
466+
data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsib2xtLnNraXBSYW5nZSI6Ilx1MDAzYzAuMi4wIn0sIm5hbWUiOiJmb28udjAuMi4wIn0sInNwZWMiOnsiY3VzdG9tcmVzb3VyY2VkZWZpbml0aW9ucyI6eyJvd25lZCI6W3siZ3JvdXAiOiJ0ZXN0LmZvbyIsImtpbmQiOiJGb28iLCJuYW1lIjoiZm9vcy50ZXN0LmZvbyIsInZlcnNpb24iOiJ2MSJ9XX0sImRpc3BsYXlOYW1lIjoiRm9vIE9wZXJhdG9yIiwiaW5zdGFsbCI6eyJzcGVjIjp7ImRlcGxveW1lbnRzIjpbeyJuYW1lIjoiZm9vLW9wZXJhdG9yIiwic3BlYyI6eyJ0ZW1wbGF0ZSI6eyJzcGVjIjp7ImNvbnRhaW5lcnMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vOnYwLjIuMCJ9XSwiaW5pdENvbnRhaW5lcnMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vLWluaXQ6djAuMi4wIn1dfX19fSx7Im5hbWUiOiJmb28tb3BlcmF0b3ItMiIsInNwZWMiOnsidGVtcGxhdGUiOnsic3BlYyI6eyJjb250YWluZXJzIjpbeyJpbWFnZSI6InRlc3QucmVnaXN0cnkvZm9vLW9wZXJhdG9yL2Zvby0yOnYwLjIuMCJ9XSwiaW5pdENvbnRhaW5lcnMiOlt7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vLWluaXQtMjp2MC4yLjAifV19fX19XX0sInN0cmF0ZWd5IjoiZGVwbG95bWVudCJ9LCJyZWxhdGVkSW1hZ2VzIjpbeyJpbWFnZSI6InRlc3QucmVnaXN0cnkvZm9vLW9wZXJhdG9yL2Zvbzp2MC4yLjAiLCJuYW1lIjoib3BlcmF0b3IifSx7ImltYWdlIjoidGVzdC5yZWdpc3RyeS9mb28tb3BlcmF0b3IvZm9vLW90aGVyOnYwLjIuMCIsIm5hbWUiOiJvdGhlciJ9XSwicmVwbGFjZXMiOiJmb28udjAuMS4wIiwic2tpcHMiOlsiZm9vLnYwLjEuMSIsImZvby52MC4xLjIiXSwidmVyc2lvbiI6IjAuMi4wIn19
467+
- type: olm.bundle.object
468+
value:
469+
data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsibmFtZSI6ImZvb3MudGVzdC5mb28ifSwic3BlYyI6eyJncm91cCI6InRlc3QuZm9vIiwibmFtZXMiOnsia2luZCI6IkZvbyIsInBsdXJhbCI6ImZvb3MifSwidmVyc2lvbnMiOlt7Im5hbWUiOiJ2MSJ9XX19
490470
relatedImages:
491471
- image: test.registry/foo-operator/foo-2:v0.2.0
492472
name: ""
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package migrations
2+
3+
import (
4+
"encoding/json"
5+
6+
"github.com/operator-framework/api/pkg/operators/v1alpha1"
7+
8+
"github.com/operator-framework/operator-registry/alpha/declcfg"
9+
"github.com/operator-framework/operator-registry/alpha/property"
10+
)
11+
12+
func bundleObjectToCSVMetadata(cfg *declcfg.DeclarativeConfig) error {
13+
convertBundleObjectToCSVMetadata := func(b *declcfg.Bundle) error {
14+
if b.Image == "" || b.CsvJSON == "" {
15+
return nil
16+
}
17+
18+
var csv v1alpha1.ClusterServiceVersion
19+
if err := json.Unmarshal([]byte(b.CsvJSON), &csv); err != nil {
20+
return err
21+
}
22+
23+
props := b.Properties[:0]
24+
for _, p := range b.Properties {
25+
switch p.Type {
26+
case property.TypeBundleObject:
27+
// Get rid of the bundle objects
28+
case property.TypeCSVMetadata:
29+
// If this bundle already has a CSV metadata
30+
// property, we won't mutate the bundle at all.
31+
return nil
32+
default:
33+
// Keep all of the other properties
34+
props = append(props, p)
35+
}
36+
}
37+
b.Properties = append(props, property.MustBuildCSVMetadata(csv))
38+
return nil
39+
}
40+
41+
for bi := range cfg.Bundles {
42+
if err := convertBundleObjectToCSVMetadata(&cfg.Bundles[bi]); err != nil {
43+
return err
44+
}
45+
}
46+
return nil
47+
}

0 commit comments

Comments
 (0)