11/*
2- Copyright The Kubernetes Authors.
2+ Copyright 2025 The Kubernetes Authors.
33
44Licensed under the Apache License, Version 2.0 (the "License");
55you may not use this file except in compliance with the License.
@@ -93,6 +93,7 @@ func (r *ROSARoleConfigReconciler) Reconcile(ctx context.Context, req ctrl.Reque
9393 if apierrors .IsNotFound (err ) {
9494 return ctrl.Result {}, nil
9595 }
96+ log .Error (err , "Failed to get ROSARoleConfig" )
9697 return ctrl.Result {Requeue : true }, nil
9798 }
9899
@@ -113,7 +114,7 @@ func (r *ROSARoleConfigReconciler) Reconcile(ctx context.Context, req ctrl.Reque
113114 defer func () {
114115 conditions .SetSummary (scope .RosaRoleConfig , conditions .WithConditions (expinfrav1 .RosaRoleConfigReadyCondition ), conditions .WithStepCounter ())
115116
116- if err := scope .Close (); err != nil {
117+ if err := scope .PatchObject (); err != nil {
117118 reterr = errors .Join (reterr , err )
118119 }
119120 }()
@@ -134,9 +135,7 @@ func (r *ROSARoleConfigReconciler) Reconcile(ctx context.Context, req ctrl.Reque
134135 }
135136
136137 if controllerutil .AddFinalizer (scope .RosaRoleConfig , expinfrav1 .RosaRoleConfigFinalizer ) {
137- if err := scope .PatchObject (); err != nil {
138- return ctrl.Result {}, err
139- }
138+ return ctrl.Result {}, err
140139 }
141140
142141 err = r .createAccountRoles (ctx , roleConfig , scope , ocmClient )
@@ -260,7 +259,6 @@ func (r *ROSARoleConfigReconciler) createOperatorRoles(ctx context.Context, role
260259 version := roleConfig .Spec .AccountRoleConfig .Version
261260 hostedCp := true
262261 forcePolicyCreation := true
263- isSharedVpc := config .SharedVPCConfig .VPCEndpointRoleARN != "" && config .SharedVPCConfig .RouteRoleARN != ""
264262
265263 operatorRoles , err := runtime .AWSClient .ListOperatorRoles (version , "" , config .Prefix )
266264
@@ -270,28 +268,35 @@ func (r *ROSARoleConfigReconciler) createOperatorRoles(ctx context.Context, role
270268
271269 for _ , roles := range operatorRoles {
272270 for _ , role := range roles {
273- if role .RoleName == fmt .Sprintf ("%s-openshift-ingress-operator-cloud-credentials" , config .Prefix ) {
271+ roleSuffix := strings .TrimPrefix (role .RoleName , config .Prefix )
272+ if roleSuffix == role .RoleName {
273+ continue
274+ }
275+ switch roleSuffix {
276+ case expinfrav1 .IngressOperatorARNSuffix :
274277 scope .RosaRoleConfig .Status .OperatorRolesRef .IngressARN = role .RoleARN
275- } else if role . RoleName == fmt . Sprintf ( "%s-openshift-image-registry-installer-cloud-credentials" , config . Prefix ) {
278+ case expinfrav1 . ImageRegistryARNSuffix :
276279 scope .RosaRoleConfig .Status .OperatorRolesRef .ImageRegistryARN = role .RoleARN
277- } else if role . RoleName == fmt . Sprintf ( "%s-openshift-cluster-csi-drivers-ebs-cloud-credentials" , config . Prefix ) {
280+ case expinfrav1 . StorageARNSuffix :
278281 scope .RosaRoleConfig .Status .OperatorRolesRef .StorageARN = role .RoleARN
279- } else if role . RoleName == fmt . Sprintf ( "%s-openshift-cloud-network-config-controller-cloud-credentials" , config . Prefix ) {
282+ case expinfrav1 . NetworkARNSuffix :
280283 scope .RosaRoleConfig .Status .OperatorRolesRef .NetworkARN = role .RoleARN
281- } else if role . RoleName == fmt . Sprintf ( "%s-kube-system-kube-controller-manager" , config . Prefix ) {
284+ case expinfrav1 . KubeCloudControllerARNSuffix :
282285 scope .RosaRoleConfig .Status .OperatorRolesRef .KubeCloudControllerARN = role .RoleARN
283- } else if role . RoleName == fmt . Sprintf ( "%s-kube-system-capa-controller-manager" , config . Prefix ) {
286+ case expinfrav1 . NodePoolManagementARNSuffix :
284287 scope .RosaRoleConfig .Status .OperatorRolesRef .NodePoolManagementARN = role .RoleARN
285- } else if role . RoleName == fmt . Sprintf ( "%s-kube-system-control-plane-operator" , config . Prefix ) {
288+ case expinfrav1 . ControlPlaneOperatorARNSuffix :
286289 scope .RosaRoleConfig .Status .OperatorRolesRef .ControlPlaneOperatorARN = role .RoleARN
287- } else if role . RoleName == fmt . Sprintf ( "%s-kube-system-kms-provider" , config . Prefix ) {
290+ case expinfrav1 . KMSProviderARNSuffix :
288291 scope .RosaRoleConfig .Status .OperatorRolesRef .KMSProviderARN = role .RoleARN
292+ default :
293+ return fmt .Errorf ("unknown role suffix: when listing operator roles %s" , roleSuffix )
289294 }
290295 }
291296 }
292297
293298 if ! r .operatorRolesReady (& scope .RosaRoleConfig .Status .OperatorRolesRef ) {
294- err = operatorroles .CreateOperatorRoles (runtime , ocm .Production , config .PermissionsBoundaryARN , interactive .ModeAuto , policies , version , isSharedVpc , config .Prefix , hostedCp , installerRoleArn , forcePolicyCreation ,
299+ err = operatorroles .CreateOperatorRoles (runtime , ocm .Production , config .PermissionsBoundaryARN , interactive .ModeAuto , policies , version , config . SharedVPCConfig . IsSharedVPC () , config .Prefix , hostedCp , installerRoleArn , forcePolicyCreation ,
295300 oidcConfigID , config .SharedVPCConfig .RouteRoleARN , ocm .DefaultChannelGroup , config .SharedVPCConfig .VPCEndpointRoleARN )
296301 return err
297302 }
@@ -423,8 +428,7 @@ func (r *ROSARoleConfigReconciler) createAccountRoles(ctx context.Context, roleC
423428 }
424429
425430 managedPolicies := true
426- isSharedVpc := config .SharedVPCConfig .VPCEndpointRoleARN != "" && config .SharedVPCConfig .RouteRoleARN != ""
427- err := accountroles .CreateHCPRoles (runtime , config .Prefix , managedPolicies , config .PermissionsBoundaryARN , ocm .Production , policies , config .Version , config .Path , isSharedVpc , config .SharedVPCConfig .RouteRoleARN , config .SharedVPCConfig .VPCEndpointRoleARN )
431+ err := accountroles .CreateHCPRoles (runtime , config .Prefix , managedPolicies , config .PermissionsBoundaryARN , ocm .Production , policies , config .Version , config .Path , config .SharedVPCConfig .IsSharedVPC (), config .SharedVPCConfig .RouteRoleARN , config .SharedVPCConfig .VPCEndpointRoleARN )
428432 return err
429433 }
430434
@@ -471,23 +475,16 @@ func (r *ROSARoleConfigReconciler) deleteAccountRoles(ocmClient *ocm.Client, aws
471475 return err
472476 }
473477
474- var err2 , err3 error
475478 if canDeleteRole (clusters , roles .InstallerRoleARN ) {
476- err = awsClient .DeleteAccountRole (strings .Split (roles .InstallerRoleARN , "/" )[1 ], config .Prefix , true , deleteHcpSharedVpcPolicies )
479+ err = errors . Join ( err , awsClient .DeleteAccountRole (strings .Split (roles .InstallerRoleARN , "/" )[1 ], config .Prefix , true , deleteHcpSharedVpcPolicies ) )
477480 }
478481 if canDeleteRole (clusters , roles .WorkerRoleARN ) {
479- err2 = awsClient .DeleteAccountRole (strings .Split (roles .WorkerRoleARN , "/" )[1 ], config .Prefix , true , deleteHcpSharedVpcPolicies )
482+ err = errors . Join ( err , awsClient .DeleteAccountRole (strings .Split (roles .WorkerRoleARN , "/" )[1 ], config .Prefix , true , deleteHcpSharedVpcPolicies ) )
480483 }
481484 if canDeleteRole (clusters , roles .SupportRoleARN ) {
482- err3 = awsClient .DeleteAccountRole (strings .Split (roles .SupportRoleARN , "/" )[1 ], config .Prefix , true , deleteHcpSharedVpcPolicies )
483- }
484- if err != nil {
485- return err
486- }
487- if err2 != nil {
488- return err2
485+ err = errors .Join (err , awsClient .DeleteAccountRole (strings .Split (roles .SupportRoleARN , "/" )[1 ], config .Prefix , true , deleteHcpSharedVpcPolicies ))
489486 }
490- return err3
487+ return err
491488}
492489
493490func (r * ROSARoleConfigReconciler ) deleteOIDCProvider (ocmClient * ocm.Client , awsClient aws.Client , oidcConfigID string ) error {
0 commit comments