@@ -280,8 +280,13 @@ func (r *ClusterAddonReconciler) Reconcile(ctx context.Context, req reconcile.Re
280280 return reconcile.Result {}, fmt .Errorf ("failed to get addon stages input: %w" , err )
281281 }
282282
283+ var (
284+ oldRelease release.Release
285+ requeue bool
286+ )
287+
283288 if clusterAddon .Spec .ClusterStack != "" {
284- oldClusterStackAddonChartPath , requeue , err : = r .downloadOldClusterStackRelease (ctx , clusterAddon )
289+ oldRelease , requeue , err = r .downloadOldClusterStackRelease (ctx , clusterAddon )
285290 if err != nil {
286291 return reconcile.Result {}, fmt .Errorf ("failed to download old cluster stack releases: %w" , err )
287292 }
@@ -291,10 +296,10 @@ func (r *ClusterAddonReconciler) Reconcile(ctx context.Context, req reconcile.Re
291296
292297 // src - /tmp/cluster-stacks/docker-ferrol-1-27-v1/docker-ferrol-1-27-cluster-addon-v1.tgz
293298 // dst - /tmp/cluster-stacks/docker-ferrol-1-27-v1/docker-ferrol-1-27-cluster-addon-v1/
294- in .oldDestinationClusterAddonChartDir = strings .TrimSuffix (oldClusterStackAddonChartPath , ".tgz" )
299+ in .oldDestinationClusterAddonChartDir = strings .TrimSuffix (oldRelease . ClusterAddonChartPath () , ".tgz" )
295300
296- if err := unTarContent (oldClusterStackAddonChartPath , in .oldDestinationClusterAddonChartDir ); err != nil {
297- return reconcile.Result {}, fmt .Errorf ("failed to untar cluster addon chart: %q: %w" , oldClusterStackAddonChartPath , err )
301+ if err := unTarContent (oldRelease . ClusterAddonChartPath () , in .oldDestinationClusterAddonChartDir ); err != nil {
302+ return reconcile.Result {}, fmt .Errorf ("failed to untar cluster addon chart: %q: %w" , oldRelease . ClusterAddonChartPath () , err )
298303 }
299304 }
300305
@@ -306,7 +311,7 @@ func (r *ClusterAddonReconciler) Reconcile(ctx context.Context, req reconcile.Re
306311
307312 // In case the Kubernetes version stays the same, the hook server does not trigger.
308313 // Therefore, we have to check whether the ClusterStack is upgraded and if that is the case, the ClusterAddons have to be upgraded as well.
309- if clusterAddon .Spec .ClusterStack != cluster .Spec .Topology .Class && clusterAddon . Status . KubernetesVersion == releaseAsset .Meta .Versions .Kubernetes {
314+ if clusterAddon .Spec .ClusterStack != cluster .Spec .Topology .Class && oldRelease . Meta . Versions . Kubernetes == releaseAsset .Meta .Versions .Kubernetes {
310315 if clusterAddon .Spec .Version != releaseAsset .Meta .Versions .Components .ClusterAddon {
311316 clusterAddon .Status .HelmChartStatus = make (map [string ]csov1alpha1.HelmChartStatusConditions )
312317 clusterAddon .Status .CurrentHook = clusterAddon .Spec .Hook
@@ -333,7 +338,7 @@ func (r *ClusterAddonReconciler) Reconcile(ctx context.Context, req reconcile.Re
333338
334339 // In case the Kubernetes version stayed the same during an upgrade, the hook server does not trigger and
335340 // we just take the Helm charts that are supposed to be installed in the BeforeClusterUpgrade hook and apply them.
336- if clusterAddon . Status . KubernetesVersion == releaseAsset .Meta .Versions .Kubernetes {
341+ if oldRelease . Meta . Versions . Kubernetes == releaseAsset .Meta .Versions .Kubernetes {
337342 clusterAddon .Spec .Hook = "BeforeClusterUpgrade"
338343 for _ , stage := range clusterAddonConfig .AddonStages ["BeforeClusterUpgrade" ] {
339344 shouldRequeue , err := r .executeStage (ctx , stage , in )
@@ -391,8 +396,7 @@ func (r *ClusterAddonReconciler) Reconcile(ctx context.Context, req reconcile.Re
391396 // remove the status resource if hook is finished
392397 clusterAddon .Status .Resources = make ([]* csov1alpha1.Resource , 0 )
393398
394- // store the release kubernetes version and current hook
395- clusterAddon .Status .KubernetesVersion = releaseAsset .Meta .Versions .Kubernetes
399+ // set the current hook and make cluster addon ready
396400 clusterAddon .Status .CurrentHook = clusterAddon .Spec .Hook
397401 clusterAddon .Status .Ready = true
398402 }
@@ -633,7 +637,7 @@ check:
633637}
634638
635639// downloadOldClusterStackRelease downloads the old cluster stack if not present and returns release clusterAddon chart path if requeue and error.
636- func (r * ClusterAddonReconciler ) downloadOldClusterStackRelease (ctx context.Context , clusterAddon * csov1alpha1.ClusterAddon , logger logr. Logger ) (string , bool , error ) {
640+ func (r * ClusterAddonReconciler ) downloadOldClusterStackRelease (ctx context.Context , clusterAddon * csov1alpha1.ClusterAddon ) (release. Release , bool , error ) {
637641 // initiate assets client.
638642 gc , err := r .AssetsClientFactory .NewClient (ctx )
639643 if err != nil {
@@ -648,9 +652,9 @@ func (r *ClusterAddonReconciler) downloadOldClusterStackRelease(ctx context.Cont
648652
649653 // give the assets client a second change
650654 if isSet {
651- return "" , true , nil
655+ return release. Release {} , true , nil
652656 }
653- return "" , false , nil
657+ return release. Release {} , false , nil
654658 }
655659
656660 conditions .MarkTrue (clusterAddon , csov1alpha1 .AssetsClientAPIAvailableCondition )
@@ -659,7 +663,7 @@ func (r *ClusterAddonReconciler) downloadOldClusterStackRelease(ctx context.Cont
659663 releaseAsset , download , err := release .New (release .ConvertFromClusterClassToClusterStackFormat (clusterAddon .Spec .ClusterStack ), r .ReleaseDirectory )
660664 if err != nil {
661665 conditions .MarkFalse (clusterAddon , csov1alpha1 .ClusterStackReleaseAssetsReadyCondition , csov1alpha1 .IssueWithReleaseAssetsReason , clusterv1 .ConditionSeverityError , err .Error ())
662- return "" , true , nil
666+ return release. Release {} , true , nil
663667 }
664668 if download {
665669 // if download is true, it means that the release assets have not been downloaded yet
@@ -670,13 +674,13 @@ func (r *ClusterAddonReconciler) downloadOldClusterStackRelease(ctx context.Cont
670674 r .clusterStackRelDownloadDirectoryMutex .Lock ()
671675
672676 if err := downloadReleaseAssets (ctx , release .ConvertFromClusterClassToClusterStackFormat (clusterAddon .Spec .ClusterStack ), releaseAsset .LocalDownloadPath , gc ); err != nil {
673- return "" , false , fmt .Errorf ("failed to download release assets: %w" , err )
677+ return release. Release {} , false , fmt .Errorf ("failed to download release assets: %w" , err )
674678 }
675679
676680 r .clusterStackRelDownloadDirectoryMutex .Unlock ()
677681
678682 // requeue to make sure release assets can be accessed
679- return "" , true , nil
683+ return release. Release {} , true , nil
680684 }
681685
682686 if err := releaseAsset .CheckHelmCharts (); err != nil {
@@ -689,13 +693,13 @@ func (r *ClusterAddonReconciler) downloadOldClusterStackRelease(ctx context.Cont
689693 msg ,
690694 )
691695 record .Warnf (clusterAddon , "ValidateHelmChartFailed" , msg )
692- return "" , false , nil
696+ return release. Release {} , false , nil
693697 }
694698
695699 // set downloaded condition if able to read metadata file
696700 conditions .MarkTrue (clusterAddon , csov1alpha1 .ClusterStackReleaseAssetsReadyCondition )
697701
698- return releaseAsset . ClusterAddonChartPath () , false , nil
702+ return releaseAsset , false , nil
699703}
700704
701705func (r * ClusterAddonReconciler ) templateAndApplyNewClusterStackAddonHelmChart (ctx context.Context , in templateAndApplyClusterAddonInput , helmChartName string ) (bool , error ) {
0 commit comments