@@ -313,7 +313,27 @@ func (r *ROSAControlPlaneReconciler) reconcileNormal(ctx context.Context, rosaSc
313313 return ctrl.Result {RequeueAfter : time .Second * 60 }, nil
314314 }
315315
316- ocmClusterSpec , err := buildOCMClusterSpec (rosaScope .ControlPlane .Spec , creator )
316+ rosaNet := & expinfrav1.RosaNetwork {}
317+ // Does the control plane reference RosaNetwork?
318+ if rosaScope .ControlPlane .Spec .RosaNetworkRef != nil {
319+ objKey := client.ObjectKey {
320+ Name : rosaScope .ControlPlane .Spec .RosaNetworkRef .Name ,
321+ Namespace : rosaScope .ControlPlane .Namespace ,
322+ }
323+
324+ err := rosaScope .Client .Get (ctx , objKey , rosaNet )
325+ if err != nil {
326+ return ctrl.Result {}, fmt .Errorf ("failed to fetch RosaNetwork: %w" , err )
327+ }
328+
329+ // Is the referenced RosaNetwork ready yet?
330+ if ! conditions .IsTrue (rosaNet , expinfrav1 .RosaNetworkReadyCondition ) {
331+ rosaScope .Info (fmt .Sprintf ("referenced RosaNetwork %s is not ready" , rosaNet .Name ))
332+ return ctrl.Result {RequeueAfter : time .Minute }, nil
333+ }
334+ }
335+
336+ ocmClusterSpec , err := buildOCMClusterSpec (rosaScope .ControlPlane .Spec , rosaNet , creator )
317337 if err != nil {
318338 return ctrl.Result {}, err
319339 }
@@ -907,12 +927,25 @@ func validateControlPlaneSpec(ocmClient rosa.OCMClient, rosaScope *scope.ROSACon
907927 return "" , nil
908928}
909929
910- func buildOCMClusterSpec (controlPlaneSpec rosacontrolplanev1.RosaControlPlaneSpec , creator * rosaaws.Creator ) (ocm.Spec , error ) {
930+ func buildOCMClusterSpec (controlPlaneSpec rosacontrolplanev1.RosaControlPlaneSpec , rosaNet * expinfrav1. RosaNetwork , creator * rosaaws.Creator ) (ocm.Spec , error ) {
911931 billingAccount := controlPlaneSpec .BillingAccount
912932 if billingAccount == "" {
913933 billingAccount = creator .AccountID
914934 }
915935
936+ var subnetIDs []string
937+ var availabilityZones []string
938+
939+ if controlPlaneSpec .RosaNetworkRef == nil {
940+ subnetIDs = controlPlaneSpec .Subnets
941+ availabilityZones = controlPlaneSpec .AvailabilityZones
942+ } else {
943+ for _ , v := range rosaNet .Status .Subnets {
944+ subnetIDs = append (subnetIDs , v .PublicSubnet , v .PrivateSubnet )
945+ availabilityZones = append (availabilityZones , v .AvailabilityZone )
946+ }
947+ }
948+
916949 ocmClusterSpec := ocm.Spec {
917950 DryRun : ptr .To (false ),
918951 Name : controlPlaneSpec .RosaClusterName ,
@@ -924,12 +957,12 @@ func buildOCMClusterSpec(controlPlaneSpec rosacontrolplanev1.RosaControlPlaneSpe
924957 DisableWorkloadMonitoring : ptr .To (true ),
925958 DefaultIngress : ocm .NewDefaultIngressSpec (), // n.b. this is a no-op when it's set to the default value
926959 ComputeMachineType : controlPlaneSpec .DefaultMachinePoolSpec .InstanceType ,
927- AvailabilityZones : controlPlaneSpec . AvailabilityZones ,
960+ AvailabilityZones : availabilityZones ,
928961 Tags : controlPlaneSpec .AdditionalTags ,
929962 EtcdEncryption : controlPlaneSpec .EtcdEncryptionKMSARN != "" ,
930963 EtcdEncryptionKMSArn : controlPlaneSpec .EtcdEncryptionKMSARN ,
931964
932- SubnetIds : controlPlaneSpec . Subnets ,
965+ SubnetIds : subnetIDs ,
933966 IsSTS : true ,
934967 RoleARN : controlPlaneSpec .InstallerRoleARN ,
935968 SupportRoleARN : controlPlaneSpec .SupportRoleARN ,
@@ -990,8 +1023,8 @@ func buildOCMClusterSpec(controlPlaneSpec rosacontrolplanev1.RosaControlPlaneSpe
9901023 ocmClusterSpec .Autoscaling = true
9911024 ocmClusterSpec .MaxReplicas = computeAutoscaling .MaxReplicas
9921025 ocmClusterSpec .MinReplicas = computeAutoscaling .MinReplicas
993- } else if len (controlPlaneSpec .AvailabilityZones ) > 1 {
994- ocmClusterSpec .ComputeNodes = len (controlPlaneSpec .AvailabilityZones )
1026+ } else if len (ocmClusterSpec .AvailabilityZones ) > 1 {
1027+ ocmClusterSpec .ComputeNodes = len (ocmClusterSpec .AvailabilityZones )
9951028 }
9961029
9971030 if controlPlaneSpec .ProvisionShardID != "" {
0 commit comments