@@ -20,6 +20,7 @@ import (
2020 "context"
2121 "errors"
2222 "fmt"
23+ "math"
2324 "time"
2425
2526 "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/networks"
@@ -759,7 +760,10 @@ func reconcileProvisionedNetworkComponents(networkingService *networking.Service
759760// cluster spec.
760761func reconcileControlPlaneEndpoint (scope * scope.WithLogger , networkingService * networking.Service , openStackCluster * infrav1.OpenStackCluster , clusterResourceName string ) error {
761762 // Calculate the port that we will use for the API server
762- apiServerPort := getAPIServerPort (openStackCluster )
763+ apiServerPort , err := getAPIServerPort (openStackCluster )
764+ if err != nil {
765+ return err
766+ }
763767
764768 // host must be set by a matching control plane endpoint provider below
765769 var host string
@@ -774,7 +778,7 @@ func reconcileControlPlaneEndpoint(scope *scope.WithLogger, networkingService *n
774778 return err
775779 }
776780
777- terminalFailure , err := loadBalancerService .ReconcileLoadBalancer (openStackCluster , clusterResourceName , apiServerPort )
781+ terminalFailure , err := loadBalancerService .ReconcileLoadBalancer (openStackCluster , clusterResourceName , int ( apiServerPort ) )
778782 if err != nil {
779783 handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to reconcile load balancer: %w" , err ), terminalFailure )
780784 return fmt .Errorf ("failed to reconcile load balancer: %w" , err )
@@ -819,21 +823,27 @@ func reconcileControlPlaneEndpoint(scope *scope.WithLogger, networkingService *n
819823
820824 openStackCluster .Spec .ControlPlaneEndpoint = & clusterv1.APIEndpoint {
821825 Host : host ,
822- Port : int32 ( apiServerPort ) ,
826+ Port : apiServerPort ,
823827 }
824828
825829 return nil
826830}
827831
828832// getAPIServerPort returns the port to use for the API server based on the cluster spec.
829- func getAPIServerPort (openStackCluster * infrav1.OpenStackCluster ) int {
833+ func getAPIServerPort (openStackCluster * infrav1.OpenStackCluster ) ( int32 , error ) {
830834 switch {
831835 case openStackCluster .Spec .ControlPlaneEndpoint != nil && openStackCluster .Spec .ControlPlaneEndpoint .IsValid ():
832- return int ( openStackCluster .Spec .ControlPlaneEndpoint .Port )
836+ return openStackCluster .Spec .ControlPlaneEndpoint .Port , nil
833837 case openStackCluster .Spec .APIServerPort != nil :
834- return * openStackCluster .Spec .APIServerPort
838+ // XXX: This highlights that we have missing validation on
839+ // APIServerPort. We should ideally add validation and change its type
840+ // to int32.
841+ if * openStackCluster .Spec .APIServerPort > math .MaxInt32 {
842+ return 0 , fmt .Errorf ("value of apiServerPort is larger than %d" , math .MaxInt32 )
843+ }
844+ return int32 (* openStackCluster .Spec .APIServerPort ), nil //nolint:gosec
835845 }
836- return 6443
846+ return 6443 , nil
837847}
838848
839849func (r * OpenStackClusterReconciler ) SetupWithManager (ctx context.Context , mgr ctrl.Manager , options controller.Options ) error {
0 commit comments