Skip to content

Commit 9bc40c9

Browse files
committed
claude-drafted uncoached solution for 1022
Signed-off-by: grokspawn <jordan@nimblewidget.com>
1 parent bcb3d07 commit 9bc40c9

File tree

2 files changed

+29
-11
lines changed

2 files changed

+29
-11
lines changed

internal/operator-controller/resolve/catalog.go

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -181,12 +181,14 @@ func (r *CatalogResolver) Resolve(ctx context.Context, ext *ocv1.ClusterExtensio
181181
// Check for ambiguity
182182
if len(resolvedBundles) != 1 {
183183
l.Info("resolution failed", "stats", catStats)
184+
upgradePolicyEnforced := ext.Spec.Source.Catalog.UpgradeConstraintPolicy != ocv1.UpgradeConstraintPolicySelfCertified && installedBundle != nil
184185
return nil, nil, nil, resolutionError{
185-
PackageName: packageName,
186-
Version: versionRange,
187-
Channels: channels,
188-
InstalledBundle: installedBundle,
189-
ResolvedBundles: resolvedBundles,
186+
PackageName: packageName,
187+
Version: versionRange,
188+
Channels: channels,
189+
InstalledBundle: installedBundle,
190+
ResolvedBundles: resolvedBundles,
191+
UpgradePolicyEnforced: upgradePolicyEnforced,
190192
}
191193
}
192194
resolvedBundle := resolvedBundles[0].bundle
@@ -210,11 +212,12 @@ func (r *CatalogResolver) Resolve(ctx context.Context, ext *ocv1.ClusterExtensio
210212
}
211213

212214
type resolutionError struct {
213-
PackageName string
214-
Version string
215-
Channels []string
216-
InstalledBundle *ocv1.BundleMetadata
217-
ResolvedBundles []foundBundle
215+
PackageName string
216+
Version string
217+
Channels []string
218+
InstalledBundle *ocv1.BundleMetadata
219+
ResolvedBundles []foundBundle
220+
UpgradePolicyEnforced bool
218221
}
219222

220223
func (rei resolutionError) Error() string {
@@ -223,6 +226,21 @@ func (rei resolutionError) Error() string {
223226
sb.WriteString(fmt.Sprintf("error upgrading from currently installed version %q: ", rei.InstalledBundle.Version))
224227
}
225228

229+
// When upgrade policy is enforced and no bundles were found, provide a clearer message
230+
// indicating that the version doesn't match any successor
231+
if rei.UpgradePolicyEnforced && len(rei.ResolvedBundles) == 0 {
232+
sb.WriteString(fmt.Sprintf("desired package %q ", rei.PackageName))
233+
if rei.Version != "" {
234+
sb.WriteString(fmt.Sprintf("with version range %q ", rei.Version))
235+
}
236+
sb.WriteString(fmt.Sprintf("does not match any successor of %q", rei.InstalledBundle.Version))
237+
if len(rei.Channels) > 0 {
238+
sb.WriteString(fmt.Sprintf(" in channels %v", rei.Channels))
239+
}
240+
return sb.String()
241+
}
242+
243+
// Default error message for other scenarios
226244
if len(rei.ResolvedBundles) > 1 {
227245
sb.WriteString(fmt.Sprintf("found bundles for package %q ", rei.PackageName))
228246
} else {

internal/operator-controller/resolve/catalog_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ func TestUpgradeNotFoundLegacy(t *testing.T) {
471471
}
472472
// 0.1.0 only upgrades to 1.0.x with its legacy upgrade edges, so this fails.
473473
_, _, _, err := r.Resolve(context.Background(), ce, installedBundle)
474-
assert.EqualError(t, err, fmt.Sprintf(`error upgrading from currently installed version "0.1.0": no bundles found for package %q matching version "<1.0.0 >=2.0.0"`, pkgName))
474+
assert.EqualError(t, err, fmt.Sprintf(`error upgrading from currently installed version "0.1.0": desired package %q with version range "<1.0.0 >=2.0.0" does not match any successor of "0.1.0"`, pkgName))
475475
}
476476

477477
func TestDowngradeFound(t *testing.T) {

0 commit comments

Comments
 (0)