1
1
/*
2
- Copyright The Kubernetes Authors.
2
+ Copyright 2025 The Kubernetes Authors.
3
3
4
4
Licensed under the Apache License, Version 2.0 (the "License");
5
5
you 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
93
93
if apierrors .IsNotFound (err ) {
94
94
return ctrl.Result {}, nil
95
95
}
96
+ log .Error (err , "Failed to get ROSARoleConfig" )
96
97
return ctrl.Result {Requeue : true }, nil
97
98
}
98
99
@@ -113,7 +114,7 @@ func (r *ROSARoleConfigReconciler) Reconcile(ctx context.Context, req ctrl.Reque
113
114
defer func () {
114
115
conditions .SetSummary (scope .RosaRoleConfig , conditions .WithConditions (expinfrav1 .RosaRoleConfigReadyCondition ), conditions .WithStepCounter ())
115
116
116
- if err := scope .Close (); err != nil {
117
+ if err := scope .PatchObject (); err != nil {
117
118
reterr = errors .Join (reterr , err )
118
119
}
119
120
}()
@@ -134,9 +135,7 @@ func (r *ROSARoleConfigReconciler) Reconcile(ctx context.Context, req ctrl.Reque
134
135
}
135
136
136
137
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
140
139
}
141
140
142
141
err = r .createAccountRoles (ctx , roleConfig , scope , ocmClient )
@@ -260,7 +259,6 @@ func (r *ROSARoleConfigReconciler) createOperatorRoles(ctx context.Context, role
260
259
version := roleConfig .Spec .AccountRoleConfig .Version
261
260
hostedCp := true
262
261
forcePolicyCreation := true
263
- isSharedVpc := config .SharedVPCConfig .VPCEndpointRoleARN != "" && config .SharedVPCConfig .RouteRoleARN != ""
264
262
265
263
operatorRoles , err := runtime .AWSClient .ListOperatorRoles (version , "" , config .Prefix )
266
264
@@ -270,28 +268,35 @@ func (r *ROSARoleConfigReconciler) createOperatorRoles(ctx context.Context, role
270
268
271
269
for _ , roles := range operatorRoles {
272
270
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 :
274
277
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 :
276
279
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 :
278
281
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 :
280
283
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 :
282
285
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 :
284
287
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 :
286
289
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 :
288
291
scope .RosaRoleConfig .Status .OperatorRolesRef .KMSProviderARN = role .RoleARN
292
+ default :
293
+ return fmt .Errorf ("unknown role suffix: when listing operator roles %s" , roleSuffix )
289
294
}
290
295
}
291
296
}
292
297
293
298
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 ,
295
300
oidcConfigID , config .SharedVPCConfig .RouteRoleARN , ocm .DefaultChannelGroup , config .SharedVPCConfig .VPCEndpointRoleARN )
296
301
return err
297
302
}
@@ -423,8 +428,7 @@ func (r *ROSARoleConfigReconciler) createAccountRoles(ctx context.Context, roleC
423
428
}
424
429
425
430
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 )
428
432
return err
429
433
}
430
434
@@ -471,23 +475,16 @@ func (r *ROSARoleConfigReconciler) deleteAccountRoles(ocmClient *ocm.Client, aws
471
475
return err
472
476
}
473
477
474
- var err2 , err3 error
475
478
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 ) )
477
480
}
478
481
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 ) )
480
483
}
481
484
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 ))
489
486
}
490
- return err3
487
+ return err
491
488
}
492
489
493
490
func (r * ROSARoleConfigReconciler ) deleteOIDCProvider (ocmClient * ocm.Client , awsClient aws.Client , oidcConfigID string ) error {
0 commit comments