@@ -32,18 +32,23 @@ import (
32
32
"sigs.k8s.io/controller-runtime/pkg/log/zap"
33
33
"sigs.k8s.io/controller-runtime/pkg/manager"
34
34
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
35
+ "sigs.k8s.io/controller-runtime/pkg/webhook"
35
36
36
37
configv1beta1 "github.com/kubeflow/katib/pkg/apis/config/v1beta1"
37
38
apis "github.com/kubeflow/katib/pkg/apis/controller"
39
+ cert "github.com/kubeflow/katib/pkg/cert-generator/v1beta1"
38
40
"github.com/kubeflow/katib/pkg/controller.v1beta1"
39
41
"github.com/kubeflow/katib/pkg/controller.v1beta1/consts"
40
42
"github.com/kubeflow/katib/pkg/util/v1beta1/katibconfig"
41
- webhook "github.com/kubeflow/katib/pkg/webhook/v1beta1"
43
+ webhookv1beta1 "github.com/kubeflow/katib/pkg/webhook/v1beta1"
42
44
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
43
45
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
44
46
)
45
47
46
- var scheme = runtime .NewScheme ()
48
+ var (
49
+ scheme = runtime .NewScheme ()
50
+ log = logf .Log .WithName ("entrypoint" )
51
+ )
47
52
48
53
func init () {
49
54
utilruntime .Must (apis .AddToScheme (scheme ))
@@ -53,15 +58,12 @@ func init() {
53
58
54
59
func main () {
55
60
logf .SetLogger (zap .New ())
56
- log := logf .Log .WithName ("entrypoint" )
57
61
58
62
var katibConfigFile string
59
63
flag .StringVar (& katibConfigFile , "katib-config" , "" ,
60
64
"The katib-controller will load its initial configuration from this file. " +
61
65
"Omit this flag to use the default configuration values. " )
62
66
63
- // TODO (andreyvelich): Currently it is not possible to set different webhook service name.
64
- // flag.StringVar(&serviceName, "webhook-service-name", "katib-controller", "The service name which will be used in webhook")
65
67
// TODO (andreyvelich): Currently is is not possible to store webhook cert in the local file system.
66
68
// flag.BoolVar(&certLocalFS, "cert-localfs", false, "Store the webhook cert in local file system")
67
69
@@ -122,21 +124,27 @@ func main() {
122
124
os .Exit (1 )
123
125
}
124
126
125
- log .Info ("Registering Components." )
126
-
127
- // Setup all Controllers
128
- log .Info ("Setting up controller." )
129
- if err := controller .AddToManager (mgr ); err != nil {
130
- log .Error (err , "Unable to register controllers to the manager" )
131
- os .Exit (1 )
127
+ // Create a webhook server.
128
+ hookServer := & webhook.Server {
129
+ Port : * initConfig .ControllerConfig .WebhookPort ,
130
+ CertDir : consts .CertDir ,
132
131
}
133
132
134
- log .Info ("Setting up webhooks." )
135
- if err := webhook .AddToManager (mgr , * initConfig .ControllerConfig .WebhookPort ); err != nil {
136
- log .Error (err , "Unable to register webhooks to the manager" )
137
- os .Exit (1 )
133
+ ctx := signals .SetupSignalHandler ()
134
+ certsReady := make (chan struct {})
135
+
136
+ if initConfig .CertGeneratorConfig .Enable {
137
+ if err = cert .AddToManager (mgr , initConfig .CertGeneratorConfig , certsReady ); err != nil {
138
+ log .Error (err , "Failed to set up cert-generator" )
139
+ }
140
+ } else {
141
+ close (certsReady )
138
142
}
139
143
144
+ // The setupControllers will register controllers to the manager
145
+ // after generated certs for the admission webhooks.
146
+ go setupControllers (mgr , certsReady , hookServer )
147
+
140
148
log .Info ("Setting up health checker." )
141
149
if err := mgr .AddHealthzCheck ("healthz" , healthz .Ping ); err != nil {
142
150
log .Error (err , "Unable to add healthz endpoint to the manager" )
@@ -147,11 +155,34 @@ func main() {
147
155
log .Error (err , "Unable to add readyz endpoint to the manager" )
148
156
os .Exit (1 )
149
157
}
158
+ if err = mgr .AddHealthzCheck ("healthz" , hookServer .StartedChecker ()); err != nil {
159
+ log .Error (err , "Add webhook server health checker to the manager failed" )
160
+ os .Exit (1 )
161
+ }
150
162
151
163
// Start the Cmd
152
- log .Info ("Starting the Cmd ." )
153
- if err : = mgr .Start (signals . SetupSignalHandler () ); err != nil {
164
+ log .Info ("Starting the manager ." )
165
+ if err = mgr .Start (ctx ); err != nil {
154
166
log .Error (err , "Unable to run the manager" )
155
167
os .Exit (1 )
156
168
}
157
169
}
170
+
171
+ func setupControllers (mgr manager.Manager , certsReady chan struct {}, hookServer * webhook.Server ) {
172
+ // The certsReady blocks to register controllers until generated certs.
173
+ <- certsReady
174
+ log .Info ("Certs ready" )
175
+
176
+ // Setup all Controllers
177
+ log .Info ("Setting up controller." )
178
+ if err := controller .AddToManager (mgr ); err != nil {
179
+ log .Error (err , "Unable to register controllers to the manager" )
180
+ os .Exit (1 )
181
+ }
182
+
183
+ log .Info ("Setting up webhooks." )
184
+ if err := webhookv1beta1 .AddToManager (mgr , hookServer ); err != nil {
185
+ log .Error (err , "Unable to register webhooks to the manager" )
186
+ os .Exit (1 )
187
+ }
188
+ }
0 commit comments