@@ -25,6 +25,7 @@ import (
25
25
"time"
26
26
27
27
"github.com/go-logr/logr"
28
+ "helm.sh/helm/v3/pkg/release"
28
29
"helm.sh/helm/v3/pkg/storage/driver"
29
30
"k8s.io/apimachinery/pkg/api/equality"
30
31
apimeta "k8s.io/apimachinery/pkg/api/meta"
@@ -246,6 +247,7 @@ func (r *ClusterExtensionReconciler) reconcile(ctx context.Context, ext *ocv1alp
246
247
Ref : resolvedBundle .Image ,
247
248
},
248
249
}
250
+
249
251
l .Info ("unpacking resolved bundle" )
250
252
unpackResult , err := r .Unpacker .Unpack (ctx , bundleSource )
251
253
if err != nil {
@@ -470,16 +472,26 @@ func (d *DefaultInstalledBundleGetter) GetInstalledBundle(ctx context.Context, e
470
472
return nil , err
471
473
}
472
474
473
- release , err := cl .Get (ext .GetName ())
475
+ rel , err := cl .Get (ext .GetName ())
474
476
if err != nil && ! errors .Is (err , driver .ErrReleaseNotFound ) {
475
477
return nil , err
476
478
}
477
- if release == nil {
479
+ if rel == nil {
478
480
return nil , nil
479
481
}
480
482
483
+ switch rel .Info .Status {
484
+ case release .StatusUnknown :
485
+ return nil , fmt .Errorf ("installation status is unknown" )
486
+ case release .StatusDeployed , release .StatusUninstalled , release .StatusSuperseded , release .StatusFailed :
487
+ case release .StatusUninstalling , release .StatusPendingInstall , release .StatusPendingRollback , release .StatusPendingUpgrade :
488
+ return nil , fmt .Errorf ("installation is still pending: %s" , rel .Info .Status )
489
+ default :
490
+ return nil , fmt .Errorf ("unknown installation status: %s" , rel .Info .Status )
491
+ }
492
+
481
493
return & ocv1alpha1.BundleMetadata {
482
- Name : release .Labels [labels .BundleNameKey ],
483
- Version : release .Labels [labels .BundleVersionKey ],
494
+ Name : rel .Labels [labels .BundleNameKey ],
495
+ Version : rel .Labels [labels .BundleVersionKey ],
484
496
}, nil
485
497
}
0 commit comments