@@ -212,9 +212,10 @@ func (r *ClusterDeploymentsReconciler) Reconcile(origCtx context.Context, req ct
212212 log .WithError (err ).Errorf ("failed to get pull secret for cluster deployment %s" , clusterDeployment .Name )
213213 return r .updateStatus (ctx , log , clusterInstall , clusterDeployment , nil , err )
214214 }
215- releaseImage , err := r .getReleaseImage (ctx , clusterDeployment , clusterInstall , pullSecret )
215+
216+ clusterImageSet , err := r .ensureClusterImageSetRef (ctx , log , clusterDeployment , clusterInstall )
216217 if err != nil {
217- log .WithError (err ).Errorf ("failed to get release image for cluster %s, ensure AgentClusterInstall.Spec.ImageSetRef references a ClusterImageSet" , clusterDeployment .Name )
218+ log .WithError (err ).Errorf ("failed to ensure release image for cluster %s, AgentClusterInstall.Spec.ImageSetRef must reference a valid ClusterImageSet" , clusterDeployment .Name )
218219 return r .updateStatus (ctx , log , clusterInstall , clusterDeployment , nil , err )
219220 }
220221
@@ -229,6 +230,11 @@ func (r *ClusterDeploymentsReconciler) Reconcile(origCtx context.Context, req ct
229230
230231 cluster , err := r .Installer .GetClusterByKubeKey (req .NamespacedName )
231232 if errors .Is (err , gorm .ErrRecordNotFound ) {
233+ releaseImage , releaseImageErr := r .getReleaseImage (ctx , clusterImageSet , pullSecret )
234+ if releaseImageErr != nil {
235+ log .WithError (releaseImageErr ).Errorf ("failed to get release image for cluster %s" , clusterDeployment .Name )
236+ return r .updateStatus (ctx , log , clusterInstall , clusterDeployment , nil , releaseImageErr )
237+ }
232238 if ! isInstalled (clusterDeployment , clusterInstall ) {
233239 return r .createNewCluster (ctx , log , req .NamespacedName , pullSecret , releaseImage , clusterDeployment , clusterInstall , mirrorRegistryConfiguration )
234240 }
@@ -1378,25 +1384,26 @@ func (r *ClusterDeploymentsReconciler) addCustomManifests(ctx context.Context, l
13781384}
13791385
13801386func CreateClusterParams (clusterDeployment * hivev1.ClusterDeployment , clusterInstall * hiveext.AgentClusterInstall ,
1381- pullSecret string , releaseImageVersion string , releaseImageCPUArch string ,
1387+ pullSecret string , releaseImage * models. ReleaseImage ,
13821388 ignitionEndpoint * models.IgnitionEndpoint , olmOperators []* models.OperatorCreateParams ) * models.ClusterCreateParams {
13831389 spec := clusterDeployment .Spec
13841390 platform , _ := getPlatform (clusterInstall .Spec )
13851391
13861392 clusterParams := & models.ClusterCreateParams {
13871393 BaseDNSDomain : spec .BaseDomain ,
13881394 Name : swag .String (spec .ClusterName ),
1389- OpenshiftVersion : & releaseImageVersion ,
1395+ OpenshiftVersion : releaseImage . Version ,
13901396 PullSecret : swag .String (pullSecret ),
13911397 VipDhcpAllocation : swag .Bool (false ),
13921398 APIVips : ApiVipsEntriesToArray (clusterInstall .Spec .APIVIPs ),
13931399 IngressVips : IngressVipsEntriesToArray (clusterInstall .Spec .IngressVIPs ),
13941400 SSHPublicKey : clusterInstall .Spec .SSHPublicKey ,
1395- CPUArchitecture : releaseImageCPUArch ,
1401+ CPUArchitecture : * releaseImage . CPUArchitecture ,
13961402 UserManagedNetworking : swag .Bool (isUserManagedNetwork (clusterInstall )),
13971403 Platform : platform ,
13981404 SchedulableMasters : swag .Bool (clusterInstall .Spec .MastersSchedulable ),
13991405 ControlPlaneCount : swag .Int64 (int64 (clusterInstall .Spec .ProvisionRequirements .ControlPlaneAgents )),
1406+ OcpReleaseImage : * releaseImage .URL ,
14001407 }
14011408
14021409 if len (clusterInstall .Spec .Networking .ClusterNetwork ) > 0 {
@@ -1484,7 +1491,10 @@ func (r *ClusterDeploymentsReconciler) createNewCluster(
14841491 mirrorRegistryConfiguration * common.MirrorRegistryConfiguration ) (ctrl.Result , error ) {
14851492
14861493 log .Infof ("Creating a new cluster %s %s" , clusterDeployment .Name , clusterDeployment .Namespace )
1487-
1494+ if releaseImage == nil { // releaseImage shoudn't be nil, but guard against it just in case
1495+ log .Errorf ("release image cannot be nil for day 1 cluster %s %s" , clusterDeployment .Name , clusterDeployment .Namespace )
1496+ return r .updateStatus (ctx , log , clusterInstall , clusterDeployment , nil , fmt .Errorf ("release image cannot be nil for day 1 cluster %s %s. Ensure AgentClusterInstall.Spec.ImageSetRef references a valid ClusterImageSet" , clusterDeployment .Name , clusterDeployment .Namespace ))
1497+ }
14881498 var ignitionEndpoint * models.IgnitionEndpoint
14891499 var err error
14901500 if clusterInstall .Spec .IgnitionEndpoint != nil {
@@ -1495,8 +1505,7 @@ func (r *ClusterDeploymentsReconciler) createNewCluster(
14951505 }
14961506 }
14971507
1498- clusterParams := CreateClusterParams (clusterDeployment , clusterInstall , pullSecret , * releaseImage .Version ,
1499- * releaseImage .CPUArchitecture , ignitionEndpoint , nil )
1508+ clusterParams := CreateClusterParams (clusterDeployment , clusterInstall , pullSecret , releaseImage , ignitionEndpoint , nil )
15001509
15011510 c , err := r .Installer .RegisterClusterInternal (ctx , & key , mirrorRegistryConfiguration , installer.V2RegisterClusterParams {
15021511 NewClusterParams : clusterParams ,
@@ -1555,12 +1564,7 @@ func (r *ClusterDeploymentsReconciler) createNewDay2Cluster(
15551564 return r .updateStatus (ctx , log , clusterInstall , clusterDeployment , c , err )
15561565}
15571566
1558- func (r * ClusterDeploymentsReconciler ) getReleaseImage (
1559- ctx context.Context ,
1560- clusterDeployment * hivev1.ClusterDeployment ,
1561- clusterInstall * hiveext.AgentClusterInstall ,
1562- pullSecret string ) (* models.ReleaseImage , error ) {
1563-
1567+ func (r * ClusterDeploymentsReconciler ) ensureClusterImageSetRef (ctx context.Context , log logrus.FieldLogger , clusterDeployment * hivev1.ClusterDeployment , clusterInstall * hiveext.AgentClusterInstall ) (* hivev1.ClusterImageSet , error ) {
15641568 // Make sure that the ImageSetRef is set before continuing
15651569 if clusterInstall .Spec .ImageSetRef == nil {
15661570 // ImageSetRef is not required for already installed clusters
@@ -1577,9 +1581,23 @@ func (r *ClusterDeploymentsReconciler) getReleaseImage(
15771581 Name : clusterInstall .Spec .ImageSetRef .Name ,
15781582 }
15791583 if err := r .Client .Get (ctx , key , clusterImageSet ); err != nil {
1584+ if k8serrors .IsNotFound (err ) {
1585+ return nil , errors .Errorf ("ClusterImageSet %s not found. Please ensure the ClusterImageSet exists" , key .Name )
1586+ }
15801587 return nil , errors .Wrapf (err , "failed to get cluster image set %s" , key .Name )
15811588 }
15821589
1590+ return clusterImageSet , nil
1591+ }
1592+
1593+ func (r * ClusterDeploymentsReconciler ) getReleaseImage (
1594+ ctx context.Context ,
1595+ clusterImageSet * hivev1.ClusterImageSet ,
1596+ pullSecret string ) (* models.ReleaseImage , error ) {
1597+ if clusterImageSet == nil {
1598+ r .Log .Debugf ("cluster image set is nil for cluster" )
1599+ return nil , nil
1600+ }
15831601 releaseImage , err := r .VersionsHandler .GetReleaseImageByURL (ctx , clusterImageSet .Spec .ReleaseImage , pullSecret )
15841602 if err != nil {
15851603 errMsgSuffix := ""
@@ -1592,7 +1610,7 @@ func (r *ClusterDeploymentsReconciler) getReleaseImage(
15921610 }
15931611 }
15941612 errMsg := "failed to get release image '%s'. Please ensure the releaseImage field in ClusterImageSet '%s' is valid, %s (error: %s)."
1595- return nil , errors .New (fmt .Sprintf (errMsg , clusterImageSet .Spec .ReleaseImage , key .Name , errMsgSuffix , err .Error ()))
1613+ return nil , errors .New (fmt .Sprintf (errMsg , clusterImageSet .Spec .ReleaseImage , clusterImageSet .Name , errMsgSuffix , err .Error ()))
15961614 }
15971615
15981616 return releaseImage , nil
0 commit comments