Skip to content

Commit ec163f2

Browse files
committed
Use error type rather than strings
Signed-off-by: Todd Short <[email protected]>
1 parent 53577db commit ec163f2

File tree

1 file changed

+40
-7
lines changed

1 file changed

+40
-7
lines changed

internal/controllers/clusterextension_controller.go

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,37 @@ import (
8080
"github.com/operator-framework/operator-controller/internal/labels"
8181
)
8282

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+
83114
// ClusterExtensionReconciler reconciles a ClusterExtension object
84115
type ClusterExtensionReconciler struct {
85116
client.Client
@@ -184,11 +215,11 @@ func (r *ClusterExtensionReconciler) handleResolutionErrors(ext *ocv1alpha1.Clus
184215
if errors.As(err, &aggErrs) {
185216
for _, err := range aggErrs.Errors() {
186217
errorMessage := err.Error()
187-
if strings.Contains(errorMessage, "no package") {
218+
if errors.As(err, &NoPackageError{}) {
188219
// Handle no package found errors, potentially setting status conditions
189220
setResolvedStatusConditionFailed(&ext.Status.Conditions, errorMessage, ext.Generation)
190221
ensureAllConditionsWithReason(ext, "ResolutionFailed", errorMessage)
191-
} else if strings.Contains(errorMessage, "invalid version range") {
222+
} else if errors.As(err, &InvalidVersionRangeError{}) {
192223
// Handle invalid version range errors, potentially setting status conditions
193224
setResolvedStatusConditionFailed(&ext.Status.Conditions, errorMessage, ext.Generation)
194225
ensureAllConditionsWithReason(ext, "ResolutionFailed", errorMessage)
@@ -428,7 +459,7 @@ func (r *ClusterExtensionReconciler) resolve(ctx context.Context, ext ocv1alpha1
428459
if versionRange != "" {
429460
vr, err := mmsemver.NewConstraint(versionRange)
430461
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))
432463
}
433464
predicates = append(predicates, catalogfilter.InMastermindsSemverRange(vr))
434465
}
@@ -453,16 +484,18 @@ func (r *ClusterExtensionReconciler) resolve(ctx context.Context, ext ocv1alpha1
453484
upgradeErrorPrefix = fmt.Sprintf("error upgrading from currently installed version %q: ", installedBundleVersion.String())
454485
}
455486
if len(resultSet) == 0 {
487+
var msg string
456488
switch {
457489
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)
459491
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)
461493
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)
463495
default:
464-
return nil, fmt.Errorf("%sno package %q found", upgradeErrorPrefix, packageName)
496+
msg = fmt.Sprintf("%sno package %q found", upgradeErrorPrefix, packageName)
465497
}
498+
return nil, NewNoPackageError(msg)
466499
}
467500

468501
sort.SliceStable(resultSet, func(i, j int) bool {

0 commit comments

Comments
 (0)