@@ -30,6 +30,7 @@ import (
3030 "github.com/go-logr/stdr"
3131 olmv1 "github.com/operator-framework/api/pkg/operators/v1"
3232 olmv1Alpha "github.com/operator-framework/api/pkg/operators/v1alpha1"
33+ olmpkgv1 "github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/apis/operators/v1"
3334 "github.com/redhat-best-practices-for-k8s/certsuite/internal/clientsholder"
3435 "github.com/redhat-best-practices-for-k8s/certsuite/internal/log"
3536 "github.com/redhat-openshift-ecosystem/openshift-preflight/artifacts"
@@ -150,6 +151,7 @@ func getUniqueCsvListByName(csvs []*olmv1Alpha.ClusterServiceVersion) []*olmv1Al
150151
151152func createOperators (csvs []* olmv1Alpha.ClusterServiceVersion ,
152153 allSubscriptions []olmv1Alpha.Subscription ,
154+ allPackageManifests []* olmpkgv1.PackageManifest ,
153155 allInstallPlans []* olmv1Alpha.InstallPlan ,
154156 allCatalogSources []* olmv1Alpha.CatalogSource ,
155157 succeededRequired ,
@@ -181,7 +183,7 @@ func createOperators(csvs []*olmv1Alpha.ClusterServiceVersion,
181183 op .PackageFromCsvName = packageAndVersion [0 ]
182184 op .Version = csv .Spec .Version .String ()
183185 // Get at least one subscription and update the Operator object with it.
184- if getAtLeastOneSubscription (op , csv , allSubscriptions ) {
186+ if getAtLeastOneSubscription (op , csv , allSubscriptions , allPackageManifests ) {
185187 targetNamespaces , err := getOperatorTargetNamespaces (op .SubscriptionNamespace )
186188 if err != nil {
187189 log .Error ("Failed to get target namespaces for operator %s: %v" , csv .Name , err )
@@ -200,7 +202,7 @@ func createOperators(csvs []*olmv1Alpha.ClusterServiceVersion,
200202 return operators
201203}
202204
203- func getAtLeastOneSubscription (op * Operator , csv * olmv1Alpha.ClusterServiceVersion , subscriptions []olmv1Alpha.Subscription ) (atLeastOneSubscription bool ) {
205+ func getAtLeastOneSubscription (op * Operator , csv * olmv1Alpha.ClusterServiceVersion , subscriptions []olmv1Alpha.Subscription , packageManifests [] * olmpkgv1. PackageManifest ) (atLeastOneSubscription bool ) {
204206 atLeastOneSubscription = false
205207 for s := range subscriptions {
206208 subscription := & subscriptions [s ]
@@ -214,11 +216,32 @@ func getAtLeastOneSubscription(op *Operator, csv *olmv1Alpha.ClusterServiceVersi
214216 op .Org = subscription .Spec .CatalogSource
215217 op .Channel = subscription .Spec .Channel
216218 atLeastOneSubscription = true
219+
220+ // If the channel is not present in the subscription, get the default channel from the package manifest
221+ if op .Channel == "" {
222+ aPackageManifest := getPackageManifestWithSubscription (subscription , packageManifests )
223+ if aPackageManifest != nil {
224+ op .Channel = aPackageManifest .Status .DefaultChannel
225+ } else {
226+ log .Error ("Could not determine the default channel, this operator will always fail certification" )
227+ }
228+ }
217229 break
218230 }
219231 return atLeastOneSubscription
220232}
221233
234+ func getPackageManifestWithSubscription (subscription * olmv1Alpha.Subscription , packageManifests []* olmpkgv1.PackageManifest ) * olmpkgv1.PackageManifest {
235+ for index := range packageManifests {
236+ if packageManifests [index ].Status .PackageName == subscription .Spec .Package &&
237+ packageManifests [index ].Namespace == subscription .Spec .CatalogSourceNamespace &&
238+ packageManifests [index ].Status .CatalogSource == subscription .Spec .CatalogSource {
239+ return packageManifests [index ]
240+ }
241+ }
242+ return nil
243+ }
244+
222245func getAtLeastOneCsv (csv * olmv1Alpha.ClusterServiceVersion , installPlan * olmv1Alpha.InstallPlan ) (atLeastOneCsv bool ) {
223246 atLeastOneCsv = false
224247 for _ , csvName := range installPlan .Spec .ClusterServiceVersionNames {
0 commit comments