Skip to content

Commit ed7a5f2

Browse files
committed
fix(registry): return all valid packages
1 parent f0e58b3 commit ed7a5f2

File tree

2 files changed

+305
-55
lines changed

2 files changed

+305
-55
lines changed

pkg/package-server/provider/registry.go

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -264,12 +264,12 @@ func (p *RegistryProvider) List(namespace string) (*operators.PackageManifestLis
264264
pkg, err := client.GetPackage(context.Background(), &api.GetPackageRequest{Name: pkgName.GetName()})
265265
if err != nil {
266266
logger.WithField("err", err.Error()).Warnf("error getting package")
267-
break
267+
continue
268268
}
269-
newPkg, err := toPackageManifest(pkg, client)
269+
newPkg, err := toPackageManifest(logger, pkg, client)
270270
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
273273
}
274274

275275
// 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
284284
return &operators.PackageManifestList{Items: pkgs}, nil
285285
}
286286

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) {
288288
pkgChannels := pkg.GetChannels()
289289
catsrc := client.source
290290
manifest := &operators.PackageManifest{
@@ -302,37 +302,54 @@ func toPackageManifest(pkg *api.Package, client registryClient) (*operators.Pack
302302
CatalogSourcePublisher: catsrc.Spec.Publisher,
303303
CatalogSourceNamespace: catsrc.GetNamespace(),
304304
PackageName: pkg.Name,
305-
Channels: make([]operators.PackageChannel, len(pkgChannels)),
306305
DefaultChannel: pkg.GetDefaultChannelName(),
307306
},
308307
}
309308

310-
for i, pkgChannel := range pkgChannels {
309+
var (
310+
providerSet bool
311+
defaultElided bool
312+
)
313+
for _, pkgChannel := range pkgChannels {
311314
bundle, err := client.GetBundleForChannel(context.Background(), &api.GetBundleInChannelRequest{PkgName: pkg.GetName(), ChannelName: pkgChannel.GetName()})
312315
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
314319
}
315320

316321
csv := operatorsv1alpha1.ClusterServiceVersion{}
317322
err = json.Unmarshal([]byte(bundle.GetCsvJson()), &csv)
318323
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
320327
}
321-
manifest.Status.Channels[i] = operators.PackageChannel{
328+
manifest.Status.Channels = append(manifest.Status.Channels, operators.PackageChannel{
322329
Name: pkgChannel.GetName(),
323330
CurrentCSV: csv.GetName(),
324331
CurrentCSVDesc: operators.CreateCSVDescription(&csv),
325-
}
332+
})
326333

327-
if manifest.Status.DefaultChannel != "" && pkgChannel.GetName() == manifest.Status.DefaultChannel || i == 0 {
334+
if manifest.Status.DefaultChannel != "" && pkgChannel.GetName() == manifest.Status.DefaultChannel || !providerSet {
328335
manifest.Status.Provider = operators.AppLink{
329336
Name: csv.Spec.Provider.Name,
330337
URL: csv.Spec.Provider.URL,
331338
}
332339
manifest.ObjectMeta.Labels["provider"] = manifest.Status.Provider.Name
333340
manifest.ObjectMeta.Labels["provider-url"] = manifest.Status.Provider.URL
341+
providerSet = true
334342
}
335343
}
336344

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+
337354
return manifest, nil
338355
}

0 commit comments

Comments
 (0)