@@ -31,6 +31,7 @@ import (
3131
3232 stsv2 "github.com/aws/aws-sdk-go-v2/service/sts"
3333 sts "github.com/aws/aws-sdk-go/service/sts"
34+ "github.com/aws/aws-sdk-go/service/sts/stsiface"
3435 "github.com/google/go-cmp/cmp"
3536 idputils "github.com/openshift-online/ocm-common/pkg/idp/utils"
3637 cmv1 "github.com/openshift-online/ocm-sdk-go/clustersmgmt/v1"
@@ -40,6 +41,7 @@ import (
4041 corev1 "k8s.io/api/core/v1"
4142 apierrors "k8s.io/apimachinery/pkg/api/errors"
4243 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
44+ "k8s.io/apimachinery/pkg/runtime"
4345 "k8s.io/apimachinery/pkg/types"
4446 kerrors "k8s.io/apimachinery/pkg/util/errors"
4547 "k8s.io/apiserver/pkg/storage/names"
@@ -58,6 +60,7 @@ import (
5860 rosacontrolplanev1 "sigs.k8s.io/cluster-api-provider-aws/v2/controlplane/rosa/api/v1beta2"
5961 expinfrav1 "sigs.k8s.io/cluster-api-provider-aws/v2/exp/api/v1beta2"
6062 "sigs.k8s.io/cluster-api-provider-aws/v2/pkg/annotations"
63+ "sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud"
6164 "sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/scope"
6265 "sigs.k8s.io/cluster-api-provider-aws/v2/pkg/logger"
6366 "sigs.k8s.io/cluster-api-provider-aws/v2/pkg/rosa"
@@ -89,11 +92,15 @@ type ROSAControlPlaneReconciler struct {
8992 WatchFilterValue string
9093 WaitInfraPeriod time.Duration
9194 Endpoints []scope.ServiceEndpoint
95+ NewStsClient func (cloud.ScopeUsage , cloud.Session , logger.Wrapper , runtime.Object ) stsiface.STSAPI
96+ NewOCMClient func (ctx context.Context , rosaScope * scope.ROSAControlPlaneScope ) (rosa.OCMClient , error )
9297}
9398
9499// SetupWithManager is used to setup the controller.
95100func (r * ROSAControlPlaneReconciler ) SetupWithManager (ctx context.Context , mgr ctrl.Manager , options controller.Options ) error {
96101 log := logger .FromContext (ctx )
102+ r .NewOCMClient = rosa .NewOCMClient
103+ r .NewStsClient = scope .NewSTSClient
97104
98105 rosaControlPlane := & rosacontrolplanev1.ROSAControlPlane {}
99106 c , err := ctrl .NewControllerManagedBy (mgr ).
@@ -173,6 +180,7 @@ func (r *ROSAControlPlaneReconciler) Reconcile(ctx context.Context, req ctrl.Req
173180 ControllerName : strings .ToLower (rosaControlPlaneKind ),
174181 Endpoints : r .Endpoints ,
175182 Logger : log ,
183+ NewStsClient : r .NewStsClient ,
176184 })
177185 if err != nil {
178186 return ctrl.Result {}, fmt .Errorf ("failed to create scope: %w" , err )
@@ -203,8 +211,8 @@ func (r *ROSAControlPlaneReconciler) reconcileNormal(ctx context.Context, rosaSc
203211 }
204212 }
205213
206- ocmClient , err := rosa .NewOCMClient (ctx , rosaScope )
207- if err != nil {
214+ ocmClient , err := r .NewOCMClient (ctx , rosaScope )
215+ if err != nil || ocmClient == nil {
208216 // TODO: need to expose in status, as likely the credentials are invalid
209217 return ctrl.Result {}, fmt .Errorf ("failed to create OCM client: %w" , err )
210218 }
@@ -332,7 +340,7 @@ func (r *ROSAControlPlaneReconciler) reconcileDelete(ctx context.Context, rosaSc
332340 }
333341
334342 ocmClient , err := rosa .NewOCMClient (ctx , rosaScope )
335- if err != nil {
343+ if err != nil || ocmClient == nil {
336344 // TODO: need to expose in status, as likely the credentials are invalid
337345 return ctrl.Result {}, fmt .Errorf ("failed to create OCM client: %w" , err )
338346 }
@@ -406,7 +414,7 @@ func (r *ROSAControlPlaneReconciler) deleteMachinePools(ctx context.Context, ros
406414 return len (machinePools ) == 0 , nil
407415}
408416
409- func (r * ROSAControlPlaneReconciler ) reconcileClusterVersion (rosaScope * scope.ROSAControlPlaneScope , ocmClient * ocm. Client , cluster * cmv1.Cluster ) error {
417+ func (r * ROSAControlPlaneReconciler ) reconcileClusterVersion (rosaScope * scope.ROSAControlPlaneScope , ocmClient rosa. OCMClient , cluster * cmv1.Cluster ) error {
410418 version := rosaScope .ControlPlane .Spec .Version
411419 if version == rosa .RawVersionID (cluster .Version ()) {
412420 conditions .MarkFalse (rosaScope .ControlPlane , rosacontrolplanev1 .ROSAControlPlaneUpgradingCondition , "upgraded" , clusterv1 .ConditionSeverityInfo , "" )
@@ -461,7 +469,7 @@ func (r *ROSAControlPlaneReconciler) reconcileClusterVersion(rosaScope *scope.RO
461469 return nil
462470}
463471
464- func (r * ROSAControlPlaneReconciler ) updateOCMCluster (rosaScope * scope.ROSAControlPlaneScope , ocmClient * ocm. Client , cluster * cmv1.Cluster , creator * rosaaws.Creator ) error {
472+ func (r * ROSAControlPlaneReconciler ) updateOCMCluster (rosaScope * scope.ROSAControlPlaneScope , ocmClient rosa. OCMClient , cluster * cmv1.Cluster , creator * rosaaws.Creator ) error {
465473 ocmClusterSpec , updated := r .updateOCMClusterSpec (rosaScope .ControlPlane , cluster )
466474
467475 if updated {
@@ -758,7 +766,7 @@ func (r *ROSAControlPlaneReconciler) reconcileExternalAuthBootstrapKubeconfig(ct
758766 return nil
759767}
760768
761- func (r * ROSAControlPlaneReconciler ) reconcileKubeconfig (ctx context.Context , rosaScope * scope.ROSAControlPlaneScope , ocmClient * ocm. Client , cluster * cmv1.Cluster ) error {
769+ func (r * ROSAControlPlaneReconciler ) reconcileKubeconfig (ctx context.Context , rosaScope * scope.ROSAControlPlaneScope , ocmClient rosa. OCMClient , cluster * cmv1.Cluster ) error {
762770 rosaScope .Debug ("Reconciling ROSA kubeconfig for cluster" , "cluster-name" , rosaScope .RosaClusterName ())
763771
764772 clusterRef := client .ObjectKeyFromObject (rosaScope .Cluster )
@@ -870,7 +878,7 @@ func (r *ROSAControlPlaneReconciler) reconcileClusterAdminPassword(ctx context.C
870878 return password , nil
871879}
872880
873- func validateControlPlaneSpec (ocmClient * ocm. Client , rosaScope * scope.ROSAControlPlaneScope ) (string , error ) {
881+ func validateControlPlaneSpec (ocmClient rosa. OCMClient , rosaScope * scope.ROSAControlPlaneScope ) (string , error ) {
874882 version := rosaScope .ControlPlane .Spec .Version
875883 valid , err := ocmClient .ValidateHypershiftVersion (version , ocm .DefaultChannelGroup )
876884 if err != nil {
0 commit comments