@@ -80,6 +80,35 @@ import (
80
80
"github.com/operator-framework/operator-controller/internal/labels"
81
81
)
82
82
83
+ // No Package error type
84
+ type NoPackageError struct {
85
+ message string
86
+ }
87
+
88
+ func NewNoPackageError (m string ) NoPackageError {
89
+ return NoPackageError {
90
+ message : m ,
91
+ }
92
+ }
93
+ func (e NoPackageError ) Error () string {
94
+ return e .message
95
+ }
96
+
97
+ // Invalid Version Range error type
98
+ type InvalidVersionRangeError struct {
99
+ message string
100
+ }
101
+
102
+ func NewInvalidVersionRangeError (m string ) InvalidVersionRangeError {
103
+ return InvalidVersionRangeError {
104
+ message : m ,
105
+ }
106
+ }
107
+
108
+ func (e InvalidVersionRangeError ) Error () string {
109
+ return e .message
110
+ }
111
+
83
112
// ClusterExtensionReconciler reconciles a ClusterExtension object
84
113
type ClusterExtensionReconciler struct {
85
114
client.Client
@@ -184,11 +213,11 @@ func (r *ClusterExtensionReconciler) handleResolutionErrors(ext *ocv1alpha1.Clus
184
213
if errors .As (err , & aggErrs ) {
185
214
for _ , err := range aggErrs .Errors () {
186
215
errorMessage := err .Error ()
187
- if strings . Contains ( errorMessage , "no package" ) {
216
+ if errors . As ( err , & NoPackageError {} ) {
188
217
// Handle no package found errors, potentially setting status conditions
189
218
setResolvedStatusConditionFailed (& ext .Status .Conditions , errorMessage , ext .Generation )
190
219
ensureAllConditionsWithReason (ext , "ResolutionFailed" , errorMessage )
191
- } else if strings . Contains ( errorMessage , "invalid version range" ) {
220
+ } else if errors . As ( err , & InvalidVersionRangeError {} ) {
192
221
// Handle invalid version range errors, potentially setting status conditions
193
222
setResolvedStatusConditionFailed (& ext .Status .Conditions , errorMessage , ext .Generation )
194
223
ensureAllConditionsWithReason (ext , "ResolutionFailed" , errorMessage )
@@ -428,7 +457,10 @@ func (r *ClusterExtensionReconciler) resolve(ctx context.Context, ext ocv1alpha1
428
457
if versionRange != "" {
429
458
vr , err := mmsemver .NewConstraint (versionRange )
430
459
if err != nil {
431
- return nil , utilerrors .NewAggregate ([]error {fmt .Errorf ("invalid version range '%s': %w" , versionRange , err )})
460
+ return nil , utilerrors .NewAggregate ([]error {
461
+ NewInvalidVersionRangeError (fmt .Sprintf ("invalid version range %q: %v" , versionRange , err )),
462
+ err ,
463
+ })
432
464
}
433
465
predicates = append (predicates , catalogfilter .InMastermindsSemverRange (vr ))
434
466
}
@@ -453,16 +485,18 @@ func (r *ClusterExtensionReconciler) resolve(ctx context.Context, ext ocv1alpha1
453
485
upgradeErrorPrefix = fmt .Sprintf ("error upgrading from currently installed version %q: " , installedBundleVersion .String ())
454
486
}
455
487
if len (resultSet ) == 0 {
488
+ var msg string
456
489
switch {
457
490
case versionRange != "" && channelName != "" :
458
- return nil , fmt .Errorf ("%sno package %q matching version %q in channel %q found" , upgradeErrorPrefix , packageName , versionRange , channelName )
491
+ msg = fmt .Sprintf ("%sno package %q matching version %q in channel %q found" , upgradeErrorPrefix , packageName , versionRange , channelName )
459
492
case versionRange != "" :
460
- return nil , fmt .Errorf ("%sno package %q matching version %q found" , upgradeErrorPrefix , packageName , versionRange )
493
+ msg = fmt .Sprintf ("%sno package %q matching version %q found" , upgradeErrorPrefix , packageName , versionRange )
461
494
case channelName != "" :
462
- return nil , fmt .Errorf ("%sno package %q in channel %q found" , upgradeErrorPrefix , packageName , channelName )
495
+ msg = fmt .Sprintf ("%sno package %q in channel %q found" , upgradeErrorPrefix , packageName , channelName )
463
496
default :
464
- return nil , fmt .Errorf ("%sno package %q found" , upgradeErrorPrefix , packageName )
497
+ msg = fmt .Sprintf ("%sno package %q found" , upgradeErrorPrefix , packageName )
465
498
}
499
+ return nil , NewNoPackageError (msg )
466
500
}
467
501
468
502
sort .SliceStable (resultSet , func (i , j int ) bool {
0 commit comments