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