@@ -235,6 +235,8 @@ func (r *ClusterExtensionReconciler) reconcile(ctx context.Context, ext *ocv1alp
235
235
setDeprecationStatusesUnknown (& ext .Status .Conditions , "deprecation checks have not been attempted as installation has failed" , ext .GetGeneration ())
236
236
return ctrl.Result {}, err
237
237
}
238
+ // set deprecation status after _successful_ resolution
239
+ SetDeprecationStatus (ext , bundle )
238
240
239
241
bundleVersion , err := bundle .Version ()
240
242
if err != nil {
@@ -259,12 +261,17 @@ func (r *ClusterExtensionReconciler) reconcile(ctx context.Context, ext *ocv1alp
259
261
260
262
switch unpackResult .State {
261
263
case rukpaksource .StatePending :
262
- updateStatusUnpackPending (& ext .Status , unpackResult )
264
+ updateStatusUnpackPending (& ext .Status , unpackResult , ext . GetGeneration () )
263
265
// There must be a limit to number of entries if status is stuck at
264
266
// unpack pending.
267
+ setHasValidBundleUnknown (& ext .Status .Conditions , "unpack pending" , ext .GetGeneration ())
268
+ setInstalledStatusConditionUnknown (& ext .Status .Conditions , "installation has not been attempted as unpack is pending" , ext .GetGeneration ())
269
+
265
270
return ctrl.Result {}, nil
266
271
case rukpaksource .StateUnpacking :
267
272
updateStatusUnpacking (& ext .Status , unpackResult )
273
+ setHasValidBundleUnknown (& ext .Status .Conditions , "unpack pending" , ext .GetGeneration ())
274
+ setInstalledStatusConditionUnknown (& ext .Status .Conditions , "installation has not been attempted as unpack is pending" , ext .GetGeneration ())
268
275
return ctrl.Result {}, nil
269
276
case rukpaksource .StateUnpacked :
270
277
// TODO: Add finalizer to clean the stored bundles, after https://github.com/operator-framework/rukpak/pull/897
@@ -409,7 +416,7 @@ func (r *ClusterExtensionReconciler) resolve(ctx context.Context, ext ocv1alpha1
409
416
channelName := ext .Spec .Channel
410
417
versionRange := ext .Spec .Version
411
418
412
- installedBundle , err := r . installedBundle (ctx , allBundles , & ext )
419
+ installedBundle , err := GetInstalledbundle (ctx , r . ActionClientGetter , allBundles , & ext )
413
420
if err != nil {
414
421
return nil , err
415
422
}
@@ -669,8 +676,41 @@ func clusterExtensionRequestsForCatalog(c client.Reader, logger logr.Logger) crh
669
676
}
670
677
}
671
678
672
- func (r * ClusterExtensionReconciler ) installedBundle (ctx context.Context , allBundles []* catalogmetadata.Bundle , ext * ocv1alpha1.ClusterExtension ) (* catalogmetadata.Bundle , error ) {
673
- cl , err := r .ActionClientGetter .ActionClientFor (ctx , ext )
679
+ type releaseState string
680
+
681
+ const (
682
+ stateNeedsInstall releaseState = "NeedsInstall"
683
+ stateNeedsUpgrade releaseState = "NeedsUpgrade"
684
+ stateUnchanged releaseState = "Unchanged"
685
+ stateError releaseState = "Error"
686
+ )
687
+
688
+ func (r * ClusterExtensionReconciler ) getReleaseState (cl helmclient.ActionInterface , obj metav1.Object , chrt * chart.Chart , values chartutil.Values , post * postrenderer ) (* release.Release , releaseState , error ) {
689
+ currentRelease , err := cl .Get (obj .GetName ())
690
+ if err != nil && ! errors .Is (err , driver .ErrReleaseNotFound ) {
691
+ return nil , stateError , err
692
+ }
693
+ if errors .Is (err , driver .ErrReleaseNotFound ) {
694
+ return nil , stateNeedsInstall , nil
695
+ }
696
+
697
+ desiredRelease , err := cl .Upgrade (obj .GetName (), r .ReleaseNamespace , chrt , values , func (upgrade * action.Upgrade ) error {
698
+ upgrade .DryRun = true
699
+ return nil
700
+ }, helmclient .AppendUpgradePostRenderer (post ))
701
+ if err != nil {
702
+ return currentRelease , stateError , err
703
+ }
704
+ if desiredRelease .Manifest != currentRelease .Manifest ||
705
+ currentRelease .Info .Status == release .StatusFailed ||
706
+ currentRelease .Info .Status == release .StatusSuperseded {
707
+ return currentRelease , stateNeedsUpgrade , nil
708
+ }
709
+ return currentRelease , stateUnchanged , nil
710
+ }
711
+
712
+ var GetInstalledbundle = func (ctx context.Context , acg helmclient.ActionClientGetter , allBundles []* catalogmetadata.Bundle , ext * ocv1alpha1.ClusterExtension ) (* catalogmetadata.Bundle , error ) {
713
+ cl , err := acg .ActionClientFor (ctx , ext )
674
714
if err != nil {
675
715
return nil , err
676
716
}
@@ -706,39 +746,6 @@ func (r *ClusterExtensionReconciler) installedBundle(ctx context.Context, allBun
706
746
return resultSet [0 ], nil
707
747
}
708
748
709
- type releaseState string
710
-
711
- const (
712
- stateNeedsInstall releaseState = "NeedsInstall"
713
- stateNeedsUpgrade releaseState = "NeedsUpgrade"
714
- stateUnchanged releaseState = "Unchanged"
715
- stateError releaseState = "Error"
716
- )
717
-
718
- func (r * ClusterExtensionReconciler ) getReleaseState (cl helmclient.ActionInterface , obj metav1.Object , chrt * chart.Chart , values chartutil.Values , post * postrenderer ) (* release.Release , releaseState , error ) {
719
- currentRelease , err := cl .Get (obj .GetName ())
720
- if err != nil && ! errors .Is (err , driver .ErrReleaseNotFound ) {
721
- return nil , stateError , err
722
- }
723
- if errors .Is (err , driver .ErrReleaseNotFound ) {
724
- return nil , stateNeedsInstall , nil
725
- }
726
-
727
- desiredRelease , err := cl .Upgrade (obj .GetName (), r .ReleaseNamespace , chrt , values , func (upgrade * action.Upgrade ) error {
728
- upgrade .DryRun = true
729
- return nil
730
- }, helmclient .AppendUpgradePostRenderer (post ))
731
- if err != nil {
732
- return currentRelease , stateError , err
733
- }
734
- if desiredRelease .Manifest != currentRelease .Manifest ||
735
- currentRelease .Info .Status == release .StatusFailed ||
736
- currentRelease .Info .Status == release .StatusSuperseded {
737
- return currentRelease , stateNeedsUpgrade , nil
738
- }
739
- return currentRelease , stateUnchanged , nil
740
- }
741
-
742
749
type errRequiredResourceNotFound struct {
743
750
error
744
751
}
0 commit comments