@@ -20,7 +20,7 @@ import (
20
20
"context"
21
21
"github.com/spf13/pflag"
22
22
zapraw "go.uber.org/zap"
23
- "k8s.io/apimachinery/pkg/runtime"
23
+ k8sruntime "k8s.io/apimachinery/pkg/runtime"
24
24
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
25
25
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
26
26
"os"
@@ -31,10 +31,12 @@ import (
31
31
"sigs.k8s.io/aws-load-balancer-controller/pkg/aws"
32
32
"sigs.k8s.io/aws-load-balancer-controller/pkg/aws/throttle"
33
33
"sigs.k8s.io/aws-load-balancer-controller/pkg/config"
34
- inject "sigs.k8s.io/aws-load-balancer-controller/pkg/inject"
34
+ "sigs.k8s.io/aws-load-balancer-controller/pkg/inject"
35
35
"sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
36
36
"sigs.k8s.io/aws-load-balancer-controller/pkg/networking"
37
+ "sigs.k8s.io/aws-load-balancer-controller/pkg/runtime"
37
38
"sigs.k8s.io/aws-load-balancer-controller/pkg/targetgroupbinding"
39
+ "sigs.k8s.io/aws-load-balancer-controller/pkg/version"
38
40
corewebhook "sigs.k8s.io/aws-load-balancer-controller/webhooks/core"
39
41
elbv2webhook "sigs.k8s.io/aws-load-balancer-controller/webhooks/elbv2"
40
42
ctrl "sigs.k8s.io/controller-runtime"
@@ -44,7 +46,7 @@ import (
44
46
)
45
47
46
48
var (
47
- scheme = runtime .NewScheme ()
49
+ scheme = k8sruntime .NewScheme ()
48
50
setupLog = ctrl .Log .WithName ("setup" )
49
51
)
50
52
@@ -56,41 +58,31 @@ func init() {
56
58
}
57
59
58
60
func main () {
59
- awsCloudConfig := aws.CloudConfig {ThrottleConfig : throttle .NewDefaultServiceOperationsThrottleConfig ()}
60
- injectConfig := inject.Config {}
61
- controllerConfig := config.ControllerConfig {}
62
-
63
- fs := pflag .NewFlagSet ("" , pflag .ExitOnError )
64
- awsCloudConfig .BindFlags (fs )
65
- injectConfig .BindFlags (fs )
66
- controllerConfig .BindFlags (fs )
67
-
68
- if err := fs .Parse (os .Args ); err != nil {
69
- setupLog .Error (err , "invalid flags" )
70
- os .Exit (1 )
71
- }
72
- if err := controllerConfig .Validate (); err != nil {
73
- setupLog .Error (err , "Failed to validate controller configuration" )
61
+ setLogLevel ("info" )
62
+ setupLog .Info ("version" ,
63
+ "GitVersion" , version .GitVersion ,
64
+ "GitCommit" , version .GitCommit ,
65
+ "BuildDate" , version .BuildDate ,
66
+ )
67
+ controllerCFG , err := loadControllerConfig ()
68
+ if err != nil {
69
+ setupLog .Error (err , "unable to load controller config" )
74
70
os .Exit (1 )
75
71
}
72
+ setLogLevel (controllerCFG .LogLevel )
76
73
77
- logLevel := zapraw .NewAtomicLevelAt (0 )
78
- if controllerConfig .LogLevel == "debug" {
79
- logLevel = zapraw .NewAtomicLevelAt (- 1 )
80
- }
81
- ctrl .SetLogger (zap .New (zap .UseDevMode (false ), zap .Level (& logLevel )))
82
-
83
- cloud , err := aws .NewCloud (awsCloudConfig , metrics .Registry )
74
+ cloud , err := aws .NewCloud (controllerCFG .AWSConfig , metrics .Registry )
84
75
if err != nil {
85
- setupLog .Error (err , "Unable to initialize AWS cloud" )
76
+ setupLog .Error (err , "unable to initialize AWS cloud" )
86
77
os .Exit (1 )
87
78
}
88
- restCfg , err := config .BuildRestConfig (controllerConfig .RuntimeConfig )
89
- rtOpts := config .BuildRuntimeOptions (controllerConfig .RuntimeConfig , scheme )
79
+ restCFG , err := config .BuildRestConfig (controllerCFG .RuntimeConfig )
90
80
if err != nil {
91
- setupLog .Error (err , "Unable to build REST config" )
81
+ setupLog .Error (err , "unable to build REST config" )
82
+ os .Exit (1 )
92
83
}
93
- mgr , err := ctrl .NewManager (restCfg , rtOpts )
84
+ rtOpts := config .BuildRuntimeOptions (controllerCFG .RuntimeConfig , scheme )
85
+ mgr , err := ctrl .NewManager (restCFG , rtOpts )
94
86
if err != nil {
95
87
setupLog .Error (err , "unable to start manager" )
96
88
os .Exit (1 )
@@ -101,18 +93,18 @@ func main() {
101
93
nodeENIResolver := networking .NewDefaultNodeENIInfoResolver (cloud .EC2 (), ctrl .Log )
102
94
sgManager := networking .NewDefaultSecurityGroupManager (cloud .EC2 (), ctrl .Log )
103
95
sgReconciler := networking .NewDefaultSecurityGroupReconciler (sgManager , ctrl .Log )
104
- subnetResolver := networking .NewSubnetsResolver (cloud .EC2 (), cloud .VpcID (), controllerConfig .ClusterName , ctrl .Log .WithName ("subnets-resolver" ))
96
+ subnetResolver := networking .NewSubnetsResolver (cloud .EC2 (), cloud .VpcID (), controllerCFG .ClusterName , ctrl .Log .WithName ("subnets-resolver" ))
105
97
tgbResManager := targetgroupbinding .NewDefaultResourceManager (mgr .GetClient (), cloud .ELBV2 (),
106
- podENIResolver , nodeENIResolver , sgManager , sgReconciler , cloud .VpcID (), controllerConfig .ClusterName , ctrl .Log )
98
+ podENIResolver , nodeENIResolver , sgManager , sgReconciler , cloud .VpcID (), controllerCFG .ClusterName , ctrl .Log )
107
99
108
100
ingGroupReconciler := ingress .NewGroupReconciler (cloud , mgr .GetClient (), mgr .GetEventRecorderFor ("ingress" ),
109
101
finalizerManager , sgManager , sgReconciler , subnetResolver ,
110
- controllerConfig , ctrl .Log .WithName ("controllers" ).WithName ("ingress" ))
102
+ controllerCFG , ctrl .Log .WithName ("controllers" ).WithName ("ingress" ))
111
103
svcReconciler := service .NewServiceReconciler (cloud , mgr .GetClient (), mgr .GetEventRecorderFor ("service" ),
112
104
finalizerManager , sgManager , sgReconciler , subnetResolver ,
113
- controllerConfig , ctrl .Log .WithName ("controllers" ).WithName ("service" ))
105
+ controllerCFG , ctrl .Log .WithName ("controllers" ).WithName ("service" ))
114
106
tgbReconciler := elbv2controller .NewTargetGroupBindingReconciler (mgr .GetClient (), finalizerManager , tgbResManager ,
115
- controllerConfig , ctrl .Log .WithName ("controllers" ).WithName ("targetGroupBinding" ))
107
+ controllerCFG , ctrl .Log .WithName ("controllers" ).WithName ("targetGroupBinding" ))
116
108
ctx := context .Background ()
117
109
if err = ingGroupReconciler .SetupWithManager (ctx , mgr ); err != nil {
118
110
setupLog .Error (err , "unable to create controller" , "controller" , "Ingress" )
@@ -127,7 +119,8 @@ func main() {
127
119
os .Exit (1 )
128
120
}
129
121
130
- podReadinessGateInjector := inject .NewPodReadinessGate (injectConfig , mgr .GetClient (), ctrl .Log .WithName ("pod-readiness-gate-injector" ))
122
+ podReadinessGateInjector := inject .NewPodReadinessGate (controllerCFG .PodWebhookConfig ,
123
+ mgr .GetClient (), ctrl .Log .WithName ("pod-readiness-gate-injector" ))
131
124
corewebhook .NewPodMutator (podReadinessGateInjector ).SetupWithManager (mgr )
132
125
elbv2webhook .NewTargetGroupBindingMutator (cloud .ELBV2 (), ctrl .Log ).SetupWithManager (mgr )
133
126
elbv2webhook .NewTargetGroupBindingValidator (ctrl .Log ).SetupWithManager (mgr )
@@ -139,3 +132,41 @@ func main() {
139
132
os .Exit (1 )
140
133
}
141
134
}
135
+
136
+ // loadControllerConfig loads the controller configuration.
137
+ func loadControllerConfig () (config.ControllerConfig , error ) {
138
+ defaultAWSThrottleCFG := throttle .NewDefaultServiceOperationsThrottleConfig ()
139
+ controllerCFG := config.ControllerConfig {
140
+ AWSConfig : aws.CloudConfig {ThrottleConfig : defaultAWSThrottleCFG },
141
+ }
142
+
143
+ fs := pflag .NewFlagSet ("" , pflag .ExitOnError )
144
+ controllerCFG .BindFlags (fs )
145
+
146
+ if err := fs .Parse (os .Args ); err != nil {
147
+ return config.ControllerConfig {}, err
148
+ }
149
+
150
+ if err := controllerCFG .Validate (); err != nil {
151
+ return config.ControllerConfig {}, err
152
+ }
153
+ return controllerCFG , nil
154
+ }
155
+
156
+ // setLogLevel sets the log level of controller.
157
+ func setLogLevel (logLevel string ) {
158
+ var zapLevel zapraw.AtomicLevel
159
+ switch logLevel {
160
+ case "info" :
161
+ zapLevel = zapraw .NewAtomicLevelAt (zapraw .InfoLevel )
162
+ case "debug" :
163
+ zapLevel = zapraw .NewAtomicLevelAt (zapraw .DebugLevel )
164
+ default :
165
+ zapLevel = zapraw .NewAtomicLevelAt (zapraw .DebugLevel )
166
+ }
167
+
168
+ logger := zap .New (zap .UseDevMode (false ),
169
+ zap .Level (zapLevel ),
170
+ zap .StacktraceLevel (zapraw .NewAtomicLevelAt (zapraw .FatalLevel )))
171
+ ctrl .SetLogger (runtime .NewConciseLogger (logger ))
172
+ }
0 commit comments