@@ -313,7 +313,27 @@ func (r *ROSAControlPlaneReconciler) reconcileNormal(ctx context.Context, rosaSc
313
313
return ctrl.Result {RequeueAfter : time .Second * 60 }, nil
314
314
}
315
315
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 )
317
337
if err != nil {
318
338
return ctrl.Result {}, err
319
339
}
@@ -907,12 +927,25 @@ func validateControlPlaneSpec(ocmClient rosa.OCMClient, rosaScope *scope.ROSACon
907
927
return "" , nil
908
928
}
909
929
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 ) {
911
931
billingAccount := controlPlaneSpec .BillingAccount
912
932
if billingAccount == "" {
913
933
billingAccount = creator .AccountID
914
934
}
915
935
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
+
916
949
ocmClusterSpec := ocm.Spec {
917
950
DryRun : ptr .To (false ),
918
951
Name : controlPlaneSpec .RosaClusterName ,
@@ -924,12 +957,12 @@ func buildOCMClusterSpec(controlPlaneSpec rosacontrolplanev1.RosaControlPlaneSpe
924
957
DisableWorkloadMonitoring : ptr .To (true ),
925
958
DefaultIngress : ocm .NewDefaultIngressSpec (), // n.b. this is a no-op when it's set to the default value
926
959
ComputeMachineType : controlPlaneSpec .DefaultMachinePoolSpec .InstanceType ,
927
- AvailabilityZones : controlPlaneSpec . AvailabilityZones ,
960
+ AvailabilityZones : availabilityZones ,
928
961
Tags : controlPlaneSpec .AdditionalTags ,
929
962
EtcdEncryption : controlPlaneSpec .EtcdEncryptionKMSARN != "" ,
930
963
EtcdEncryptionKMSArn : controlPlaneSpec .EtcdEncryptionKMSARN ,
931
964
932
- SubnetIds : controlPlaneSpec . Subnets ,
965
+ SubnetIds : subnetIDs ,
933
966
IsSTS : true ,
934
967
RoleARN : controlPlaneSpec .InstallerRoleARN ,
935
968
SupportRoleARN : controlPlaneSpec .SupportRoleARN ,
@@ -990,8 +1023,8 @@ func buildOCMClusterSpec(controlPlaneSpec rosacontrolplanev1.RosaControlPlaneSpe
990
1023
ocmClusterSpec .Autoscaling = true
991
1024
ocmClusterSpec .MaxReplicas = computeAutoscaling .MaxReplicas
992
1025
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 )
995
1028
}
996
1029
997
1030
if controlPlaneSpec .ProvisionShardID != "" {
0 commit comments