Skip to content

Commit b6d0e4a

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

File tree

1 file changed

+41
-7
lines changed

1 file changed

+41
-7
lines changed

internal/controllers/clusterextension_controller.go

+41-7
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,35 @@ import (
8080
"github.com/operator-framework/operator-controller/internal/labels"
8181
)
8282

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+
83112
// ClusterExtensionReconciler reconciles a ClusterExtension object
84113
type ClusterExtensionReconciler struct {
85114
client.Client
@@ -184,11 +213,11 @@ func (r *ClusterExtensionReconciler) handleResolutionErrors(ext *ocv1alpha1.Clus
184213
if errors.As(err, &aggErrs) {
185214
for _, err := range aggErrs.Errors() {
186215
errorMessage := err.Error()
187-
if strings.Contains(errorMessage, "no package") {
216+
if errors.As(err, &NoPackageError{}) {
188217
// Handle no package found errors, potentially setting status conditions
189218
setResolvedStatusConditionFailed(&ext.Status.Conditions, errorMessage, ext.Generation)
190219
ensureAllConditionsWithReason(ext, "ResolutionFailed", errorMessage)
191-
} else if strings.Contains(errorMessage, "invalid version range") {
220+
} else if errors.As(err, &InvalidVersionRangeError{}) {
192221
// Handle invalid version range errors, potentially setting status conditions
193222
setResolvedStatusConditionFailed(&ext.Status.Conditions, errorMessage, ext.Generation)
194223
ensureAllConditionsWithReason(ext, "ResolutionFailed", errorMessage)
@@ -428,7 +457,10 @@ func (r *ClusterExtensionReconciler) resolve(ctx context.Context, ext ocv1alpha1
428457
if versionRange != "" {
429458
vr, err := mmsemver.NewConstraint(versionRange)
430459
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+
})
432464
}
433465
predicates = append(predicates, catalogfilter.InMastermindsSemverRange(vr))
434466
}
@@ -453,16 +485,18 @@ func (r *ClusterExtensionReconciler) resolve(ctx context.Context, ext ocv1alpha1
453485
upgradeErrorPrefix = fmt.Sprintf("error upgrading from currently installed version %q: ", installedBundleVersion.String())
454486
}
455487
if len(resultSet) == 0 {
488+
var msg string
456489
switch {
457490
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)
459492
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)
461494
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)
463496
default:
464-
return nil, fmt.Errorf("%sno package %q found", upgradeErrorPrefix, packageName)
497+
msg = fmt.Sprintf("%sno package %q found", upgradeErrorPrefix, packageName)
465498
}
499+
return nil, NewNoPackageError(msg)
466500
}
467501

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

0 commit comments

Comments
 (0)