@@ -264,12 +264,12 @@ func (p *RegistryProvider) List(namespace string) (*operators.PackageManifestLis
264
264
pkg , err := client .GetPackage (context .Background (), & api.GetPackageRequest {Name : pkgName .GetName ()})
265
265
if err != nil {
266
266
logger .WithField ("err" , err .Error ()).Warnf ("error getting package" )
267
- break
267
+ continue
268
268
}
269
- newPkg , err := toPackageManifest (pkg , client )
269
+ newPkg , err := toPackageManifest (logger , pkg , client )
270
270
if err != nil {
271
- logger .WithField ("err" , err .Error ()).Warnf ("error converting to packagemanifest" )
272
- break
271
+ logger .WithField ("err" , err .Error ()).Warnf ("eliding package: error converting to packagemanifest" )
272
+ continue
273
273
}
274
274
275
275
// Set request namespace to stop kube clients from complaining about global namespace mismatch.
@@ -284,7 +284,7 @@ func (p *RegistryProvider) List(namespace string) (*operators.PackageManifestLis
284
284
return & operators.PackageManifestList {Items : pkgs }, nil
285
285
}
286
286
287
- func toPackageManifest (pkg * api.Package , client registryClient ) (* operators.PackageManifest , error ) {
287
+ func toPackageManifest (logger * logrus. Entry , pkg * api.Package , client registryClient ) (* operators.PackageManifest , error ) {
288
288
pkgChannels := pkg .GetChannels ()
289
289
catsrc := client .source
290
290
manifest := & operators.PackageManifest {
@@ -302,37 +302,54 @@ func toPackageManifest(pkg *api.Package, client registryClient) (*operators.Pack
302
302
CatalogSourcePublisher : catsrc .Spec .Publisher ,
303
303
CatalogSourceNamespace : catsrc .GetNamespace (),
304
304
PackageName : pkg .Name ,
305
- Channels : make ([]operators.PackageChannel , len (pkgChannels )),
306
305
DefaultChannel : pkg .GetDefaultChannelName (),
307
306
},
308
307
}
309
308
310
- for i , pkgChannel := range pkgChannels {
309
+ var (
310
+ providerSet bool
311
+ defaultElided bool
312
+ )
313
+ for _ , pkgChannel := range pkgChannels {
311
314
bundle , err := client .GetBundleForChannel (context .Background (), & api.GetBundleInChannelRequest {PkgName : pkg .GetName (), ChannelName : pkgChannel .GetName ()})
312
315
if err != nil {
313
- return nil , err
316
+ logger .WithError (err ).WithField ("channel" , pkgChannel .GetName ()).Warn ("error getting bundle, eliding channel" )
317
+ defaultElided = defaultElided || pkgChannel .Name == manifest .Status .DefaultChannel
318
+ continue
314
319
}
315
320
316
321
csv := operatorsv1alpha1.ClusterServiceVersion {}
317
322
err = json .Unmarshal ([]byte (bundle .GetCsvJson ()), & csv )
318
323
if err != nil {
319
- return nil , err
324
+ logger .WithError (err ).WithField ("channel" , pkgChannel .GetName ()).Warn ("error unmarshaling csv, eliding channel" )
325
+ defaultElided = defaultElided || pkgChannel .Name == manifest .Status .DefaultChannel
326
+ continue
320
327
}
321
- manifest .Status .Channels [ i ] = operators.PackageChannel {
328
+ manifest .Status .Channels = append ( manifest . Status . Channels , operators.PackageChannel {
322
329
Name : pkgChannel .GetName (),
323
330
CurrentCSV : csv .GetName (),
324
331
CurrentCSVDesc : operators .CreateCSVDescription (& csv ),
325
- }
332
+ })
326
333
327
- if manifest .Status .DefaultChannel != "" && pkgChannel .GetName () == manifest .Status .DefaultChannel || i == 0 {
334
+ if manifest .Status .DefaultChannel != "" && pkgChannel .GetName () == manifest .Status .DefaultChannel || ! providerSet {
328
335
manifest .Status .Provider = operators.AppLink {
329
336
Name : csv .Spec .Provider .Name ,
330
337
URL : csv .Spec .Provider .URL ,
331
338
}
332
339
manifest .ObjectMeta .Labels ["provider" ] = manifest .Status .Provider .Name
333
340
manifest .ObjectMeta .Labels ["provider-url" ] = manifest .Status .Provider .URL
341
+ providerSet = true
334
342
}
335
343
}
336
344
345
+ if len (manifest .Status .Channels ) == 0 {
346
+ return nil , fmt .Errorf ("packagemanifest has no valid channels" )
347
+ }
348
+
349
+ if defaultElided {
350
+ logger .Warn ("default channel elided, setting as first in packagemanifest" )
351
+ manifest .Status .DefaultChannel = manifest .Status .Channels [0 ].Name
352
+ }
353
+
337
354
return manifest , nil
338
355
}
0 commit comments