@@ -228,10 +228,11 @@ func (r *ROSAControlPlaneReconciler) reconcileNormal(ctx context.Context, rosaSc
228228 return ctrl.Result {}, fmt .Errorf ("failed to transform caller identity to creator: %w" , err )
229229 }
230230
231+ rosaRoleConfig := & expinfrav1.ROSARoleConfig {}
231232 // Get role configuration from either RosaRoleConfig or direct fields
232233 if rosaScope .ControlPlane .Spec .RosaRoleConfigRef != nil {
233234 // Get configuration from RosaRoleConfig
234- rosaRoleConfig := & expinfrav1. ROSARoleConfig {}
235+
235236 key := client.ObjectKey {
236237 Name : rosaScope .ControlPlane .Spec .RosaRoleConfigRef .Name ,
237238 Namespace : rosaScope .ControlPlane .Namespace ,
@@ -260,21 +261,25 @@ func (r *ROSAControlPlaneReconciler) reconcileNormal(ctx context.Context, rosaSc
260261 }
261262
262263 conditions .MarkTrue (rosaScope .ControlPlane , rosacontrolplanev1 .ROSARoleConfigReadyCondition )
263-
264- // Update spec fields from RosaRoleConfig
265- rosaScope .ControlPlane .Spec .OIDCID = rosaRoleConfig .Status .OIDCID
266- rosaScope .ControlPlane .Spec .InstallerRoleARN = rosaRoleConfig .Status .AccountRolesRef .InstallerRoleARN
267- rosaScope .ControlPlane .Spec .SupportRoleARN = rosaRoleConfig .Status .AccountRolesRef .SupportRoleARN
268- rosaScope .ControlPlane .Spec .WorkerRoleARN = rosaRoleConfig .Status .AccountRolesRef .WorkerRoleARN
269- rosaScope .ControlPlane .Spec .RolesRef = rosaRoleConfig .Status .OperatorRolesRef
270- rosaScope .ControlPlane .Spec .EnableExternalAuthProviders = len (rosaRoleConfig .Spec .OIDCConfig .ExternalAuthProviders ) > 0
264+ } else {
265+ rosaRoleConfig .Status .OIDCID = rosaScope .ControlPlane .Spec .OIDCID
266+ rosaRoleConfig .Status .AccountRolesRef .InstallerRoleARN = rosaScope .ControlPlane .Spec .InstallerRoleARN
267+ rosaRoleConfig .Status .AccountRolesRef .SupportRoleARN = rosaScope .ControlPlane .Spec .SupportRoleARN
268+ rosaRoleConfig .Status .AccountRolesRef .WorkerRoleARN = rosaScope .ControlPlane .Spec .WorkerRoleARN
269+ rosaRoleConfig .Status .OperatorRolesRef = rosaScope .ControlPlane .Spec .RolesRef
270+ rosaRoleConfig .Spec .OIDCConfig .ExternalAuthProviders = rosaScope .ControlPlane .Spec .ExternalAuthProviders
271271 }
272272
273273 validationMessage , err := validateControlPlaneSpec (ocmClient , rosaScope )
274274 if err != nil {
275275 return ctrl.Result {}, fmt .Errorf ("failed to validate ROSAControlPlane.spec: %w" , err )
276276 }
277277
278+ err = validateRoleConfigSpec (rosaRoleConfig )
279+ if err != nil {
280+ return ctrl.Result {}, fmt .Errorf ("failed to validate ROSAControlPlane.spec: %w" , err )
281+ }
282+
278283 conditions .MarkTrue (rosaScope .ControlPlane , rosacontrolplanev1 .ROSAControlPlaneValidCondition )
279284 if validationMessage != "" {
280285 conditions .MarkFalse (rosaScope .ControlPlane ,
@@ -357,7 +362,7 @@ func (r *ROSAControlPlaneReconciler) reconcileNormal(ctx context.Context, rosaSc
357362 return ctrl.Result {RequeueAfter : time .Second * 60 }, nil
358363 }
359364
360- ocmClusterSpec , err := buildOCMClusterSpec (rosaScope .ControlPlane .Spec , creator )
365+ ocmClusterSpec , err := buildOCMClusterSpec (rosaScope .ControlPlane .Spec , rosaRoleConfig , creator )
361366 if err != nil {
362367 return ctrl.Result {}, err
363368 }
@@ -951,7 +956,7 @@ func validateControlPlaneSpec(ocmClient rosa.OCMClient, rosaScope *scope.ROSACon
951956 return "" , nil
952957}
953958
954- func buildOCMClusterSpec (controlPlaneSpec rosacontrolplanev1.RosaControlPlaneSpec , creator * rosaaws.Creator ) (ocm.Spec , error ) {
959+ func buildOCMClusterSpec (controlPlaneSpec rosacontrolplanev1.RosaControlPlaneSpec , roleConfig * expinfrav1. ROSARoleConfig , creator * rosaaws.Creator ) (ocm.Spec , error ) {
955960 billingAccount := controlPlaneSpec .BillingAccount
956961 if billingAccount == "" {
957962 billingAccount = creator .AccountID
@@ -975,11 +980,11 @@ func buildOCMClusterSpec(controlPlaneSpec rosacontrolplanev1.RosaControlPlaneSpe
975980
976981 SubnetIds : controlPlaneSpec .Subnets ,
977982 IsSTS : true ,
978- RoleARN : controlPlaneSpec .InstallerRoleARN ,
979- SupportRoleARN : controlPlaneSpec .SupportRoleARN ,
980- WorkerRoleARN : controlPlaneSpec .WorkerRoleARN ,
981- OperatorIAMRoles : operatorIAMRoles (controlPlaneSpec . RolesRef ),
982- OidcConfigId : controlPlaneSpec .OIDCID ,
983+ RoleARN : roleConfig . Status . AccountRolesRef .InstallerRoleARN ,
984+ SupportRoleARN : roleConfig . Status . AccountRolesRef .SupportRoleARN ,
985+ WorkerRoleARN : roleConfig . Status . AccountRolesRef .WorkerRoleARN ,
986+ OperatorIAMRoles : operatorIAMRoles (roleConfig . Status . OperatorRolesRef ),
987+ OidcConfigId : roleConfig . Status .OIDCID ,
983988 Mode : "auto" ,
984989 Hypershift : ocm.Hypershift {
985990 Enabled : true ,
@@ -1183,3 +1188,55 @@ func convertStsV2(identity *sts.GetCallerIdentityOutput) *stsv2.GetCallerIdentit
11831188 UserId : identity .UserId ,
11841189 }
11851190}
1191+
1192+ func validateRoleConfigSpec (roleConfig * expinfrav1.ROSARoleConfig ) error {
1193+ if roleConfig .Status .OIDCID == "" {
1194+ return fmt .Errorf ("OIDCID is required" )
1195+ }
1196+
1197+ if roleConfig .Status .AccountRolesRef .InstallerRoleARN == "" {
1198+ return fmt .Errorf ("InstallerRoleARN is required" )
1199+ }
1200+
1201+ if roleConfig .Status .AccountRolesRef .SupportRoleARN == "" {
1202+ return fmt .Errorf ("SupportRoleARN is required" )
1203+ }
1204+
1205+ if roleConfig .Status .AccountRolesRef .WorkerRoleARN == "" {
1206+ return fmt .Errorf ("WorkerRoleARN is required" )
1207+ }
1208+
1209+ if roleConfig .Status .OperatorRolesRef .IngressARN == "" {
1210+ return fmt .Errorf ("IngressARN is required" )
1211+ }
1212+
1213+ if roleConfig .Status .OperatorRolesRef .ImageRegistryARN == "" {
1214+ return fmt .Errorf ("ImageRegistryARN is required" )
1215+ }
1216+
1217+ if roleConfig .Status .OperatorRolesRef .StorageARN == "" {
1218+ return fmt .Errorf ("StorageARN is required" )
1219+ }
1220+
1221+ if roleConfig .Status .OperatorRolesRef .NetworkARN == "" {
1222+ return fmt .Errorf ("NetworkARN is required" )
1223+ }
1224+
1225+ if roleConfig .Status .OperatorRolesRef .KubeCloudControllerARN == "" {
1226+ return fmt .Errorf ("KubeCloudControllerARN is required" )
1227+ }
1228+
1229+ if roleConfig .Status .OperatorRolesRef .KMSProviderARN == "" {
1230+ return fmt .Errorf ("KMSProviderARN is required" )
1231+ }
1232+
1233+ if roleConfig .Status .OperatorRolesRef .ControlPlaneOperatorARN == "" {
1234+ return fmt .Errorf ("ControlPlaneOperatorARN is required" )
1235+ }
1236+
1237+ if roleConfig .Status .OperatorRolesRef .NodePoolManagementARN == "" {
1238+ return fmt .Errorf ("NodePoolManagementARN is required" )
1239+ }
1240+
1241+ return nil
1242+ }
0 commit comments