@@ -30,6 +30,7 @@ import (
3030 "github.com/spf13/pflag"
3131 "k8s.io/apimachinery/pkg/runtime"
3232 cgscheme "k8s.io/client-go/kubernetes/scheme"
33+ "k8s.io/client-go/rest"
3334 "k8s.io/client-go/tools/leaderelection/resourcelock"
3435 cgrecord "k8s.io/client-go/tools/record"
3536 "k8s.io/component-base/logs"
@@ -42,6 +43,10 @@ import (
4243 "sigs.k8s.io/controller-runtime/pkg/controller"
4344 "sigs.k8s.io/controller-runtime/pkg/webhook"
4445
46+ clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
47+ expclusterv1 "sigs.k8s.io/cluster-api/exp/api/v1beta1"
48+ "sigs.k8s.io/cluster-api/util/flags"
49+
4550 // +kubebuilder:scaffold:imports
4651 infrav1beta1 "sigs.k8s.io/cluster-api-provider-aws/v2/api/v1beta1"
4752 infrav1 "sigs.k8s.io/cluster-api-provider-aws/v2/api/v1beta2"
@@ -65,9 +70,6 @@ import (
6570 "sigs.k8s.io/cluster-api-provider-aws/v2/pkg/logger"
6671 "sigs.k8s.io/cluster-api-provider-aws/v2/pkg/record"
6772 "sigs.k8s.io/cluster-api-provider-aws/v2/version"
68- clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
69- expclusterv1 "sigs.k8s.io/cluster-api/exp/api/v1beta1"
70- "sigs.k8s.io/cluster-api/util/flags"
7173)
7274
7375var (
@@ -171,36 +173,46 @@ func main() {
171173
172174 ctx := ctrl .SetupSignalHandler ()
173175
174- restConfig := ctrl .GetConfigOrDie ()
175- restConfig .UserAgent = "cluster-api-provider-aws-controller"
176- mgr , err := ctrl .NewManager (restConfig , ctrl.Options {
177- Scheme : scheme ,
178- Metrics : * metricsOptions ,
179- LeaderElection : enableLeaderElection ,
180- LeaseDuration : & leaderElectionLeaseDuration ,
181- RenewDeadline : & leaderElectionRenewDeadline ,
182- RetryPeriod : & leaderElectionRetryPeriod ,
183- LeaderElectionResourceLock : resourcelock .LeasesResourceLock ,
184- LeaderElectionID : "controller-leader-elect-capa" ,
185- LeaderElectionNamespace : leaderElectionNamespace ,
186- Cache : cache.Options {
187- DefaultNamespaces : watchNamespaces ,
188- SyncPeriod : & syncPeriod ,
189- },
176+ ctrlOpts := ctrl.Options {
177+ Scheme : scheme ,
178+ Metrics : * metricsOptions ,
190179 WebhookServer : webhook .NewServer (webhook.Options {
191180 Port : webhookPort ,
192181 CertDir : webhookCertDir ,
193182 }),
194183 EventBroadcaster : broadcaster ,
195184 HealthProbeBindAddress : healthAddr ,
196- })
185+ }
186+
187+ var restConfig * rest.Config
188+ if webhookPort == 0 {
189+ restConfig = ctrl .GetConfigOrDie ()
190+ restConfig .UserAgent = "cluster-api-provider-aws-controller"
191+ ctrlOpts .LeaderElection = enableLeaderElection
192+ ctrlOpts .LeaseDuration = & leaderElectionLeaseDuration
193+ ctrlOpts .RenewDeadline = & leaderElectionRenewDeadline
194+ ctrlOpts .RetryPeriod = & leaderElectionRetryPeriod
195+ ctrlOpts .Cache = cache.Options {
196+ DefaultNamespaces : watchNamespaces ,
197+ SyncPeriod : & syncPeriod ,
198+ }
199+ ctrlOpts .LeaderElectionResourceLock = resourcelock .LeasesResourceLock
200+ ctrlOpts .LeaderElectionID = "controller-leader-elect-capa"
201+ ctrlOpts .LeaderElectionNamespace = leaderElectionNamespace
202+ } else {
203+ restConfig = & rest.Config {}
204+ }
205+
206+ mgr , err := ctrl .NewManager (restConfig , ctrlOpts )
197207 if err != nil {
198208 setupLog .Error (err , "unable to start manager" )
199209 os .Exit (1 )
200210 }
201211
202212 // Initialize event recorder.
203- record .InitFromRecorder (mgr .GetEventRecorderFor ("aws-controller" ))
213+ if webhookPort == 0 {
214+ record .InitFromRecorder (mgr .GetEventRecorderFor ("aws-controller" ))
215+ }
204216
205217 setupLog .Info (fmt .Sprintf ("feature gates: %+v\n " , feature .Gates ))
206218
@@ -326,30 +338,8 @@ func setupReconcilersAndWebhooks(ctx context.Context, mgr ctrl.Manager, awsServi
326338 setupLog .Error (err , "unable to create controller" , "controller" , "AWSCluster" )
327339 os .Exit (1 )
328340 }
329- }
330341
331- if feature .Gates .Enabled (feature .MachinePool ) {
332- setupLog .Debug ("enabling machine pool controller and webhook" )
333- if webhookPort == 0 {
334- if err := (& expcontrollers.AWSMachinePoolReconciler {
335- Client : mgr .GetClient (),
336- Recorder : mgr .GetEventRecorderFor ("awsmachinepool-controller" ),
337- WatchFilterValue : watchFilterValue ,
338- TagUnmanagedNetworkResources : feature .Gates .Enabled (feature .TagUnmanagedNetworkResources ),
339- }).SetupWithManager (ctx , mgr , controller.Options {MaxConcurrentReconciles : instanceStateConcurrency , RecoverPanic : ptr.To [bool ](true )}); err != nil {
340- setupLog .Error (err , "unable to create controller" , "controller" , "AWSMachinePool" )
341- os .Exit (1 )
342- }
343- } else {
344- if err := (& expinfrav1.AWSMachinePool {}).SetupWebhookWithManager (mgr ); err != nil {
345- setupLog .Error (err , "unable to create webhook" , "webhook" , "AWSMachinePool" )
346- os .Exit (1 )
347- }
348- }
349- }
350-
351- if feature .Gates .Enabled (feature .EventBridgeInstanceState ) {
352- if webhookPort == 0 {
342+ if feature .Gates .Enabled (feature .EventBridgeInstanceState ) {
353343 setupLog .Info ("EventBridge notifications enabled. enabling AWSInstanceStateController" )
354344 if err := (& instancestate.AwsInstanceStateReconciler {
355345 Client : mgr .GetClient (),
@@ -361,11 +351,9 @@ func setupReconcilersAndWebhooks(ctx context.Context, mgr ctrl.Manager, awsServi
361351 os .Exit (1 )
362352 }
363353 }
364- }
365354
366- if feature .Gates .Enabled (feature .AutoControllerIdentityCreator ) {
367- setupLog .Info ("AutoControllerIdentityCreator enabled" )
368- if webhookPort == 0 {
355+ if feature .Gates .Enabled (feature .AutoControllerIdentityCreator ) {
356+ setupLog .Info ("AutoControllerIdentityCreator enabled" )
369357 if err := (& controlleridentitycreator.AWSControllerIdentityReconciler {
370358 Client : mgr .GetClient (),
371359 Log : ctrl .Log .WithName ("controllers" ).WithName ("AWSControllerIdentity" ),
@@ -376,9 +364,26 @@ func setupReconcilersAndWebhooks(ctx context.Context, mgr ctrl.Manager, awsServi
376364 os .Exit (1 )
377365 }
378366 }
379- }
380-
381- if webhookPort != 0 {
367+ if feature .Gates .Enabled (feature .MachinePool ) {
368+ setupLog .Debug ("enabling machine pool controller and webhook" )
369+ if err := (& expcontrollers.AWSMachinePoolReconciler {
370+ Client : mgr .GetClient (),
371+ Recorder : mgr .GetEventRecorderFor ("awsmachinepool-controller" ),
372+ WatchFilterValue : watchFilterValue ,
373+ TagUnmanagedNetworkResources : feature .Gates .Enabled (feature .TagUnmanagedNetworkResources ),
374+ }).SetupWithManager (ctx , mgr , controller.Options {MaxConcurrentReconciles : instanceStateConcurrency , RecoverPanic : ptr.To [bool ](true )}); err != nil {
375+ setupLog .Error (err , "unable to create controller" , "controller" , "AWSMachinePool" )
376+ os .Exit (1 )
377+ }
378+ }
379+ } else {
380+ if feature .Gates .Enabled (feature .MachinePool ) {
381+ setupLog .Debug ("enabling machine pool controller and webhook" )
382+ if err := (& expinfrav1.AWSMachinePool {}).SetupWebhookWithManager (mgr ); err != nil {
383+ setupLog .Error (err , "unable to create webhook" , "webhook" , "AWSMachinePool" )
384+ os .Exit (1 )
385+ }
386+ }
382387 if err := (& infrav1.AWSMachineTemplateWebhook {}).SetupWebhookWithManager (mgr ); err != nil {
383388 setupLog .Error (err , "unable to create webhook" , "webhook" , "AWSMachineTemplate" )
384389 os .Exit (1 )
@@ -408,6 +413,7 @@ func setupReconcilersAndWebhooks(ctx context.Context, mgr ctrl.Manager, awsServi
408413 os .Exit (1 )
409414 }
410415 }
416+
411417}
412418
413419func setupEKSReconcilersAndWebhooks (ctx context.Context , mgr ctrl.Manager , awsServiceEndpoints []scope.ServiceEndpoint ,
0 commit comments