Skip to content

Instantly share code, notes, and snippets.

@sttts
Created September 13, 2022 08:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sttts/619c05f67e80ada799d8e2c4c662a15f to your computer and use it in GitHub Desktop.
Save sttts/619c05f67e80ada799d8e2c4c662a15f to your computer and use it in GitHub Desktop.
diff --git a/cmd/cache-server/main.go b/cmd/cache-server/main.go
index 71cab85e..d6a0da19 100644
--- a/cmd/cache-server/main.go
+++ b/cmd/cache-server/main.go
@@ -84,7 +84,12 @@ func main() {
return err
}
}
- return server.Run(ctx)
+
+ prepared, err := server.PrepareRun(ctx)
+ if err != nil {
+ return err
+ }
+ return prepared.Run(ctx)
},
}
diff --git a/pkg/cache/server/server.go b/pkg/cache/server/server.go
index e1b2607e..01cd198f 100644
--- a/pkg/cache/server/server.go
+++ b/pkg/cache/server/server.go
@@ -19,6 +19,7 @@ package server
import (
"context"
+ apiextensionsapiserver "k8s.io/apiextensions-apiserver/pkg/apiserver"
genericapiserver "k8s.io/apiserver/pkg/server"
"k8s.io/klog/v2"
@@ -28,34 +29,44 @@ import (
type Server struct {
CompletedConfig
+
+ apiextensions *apiextensionsapiserver.CustomResourceDefinitions
}
func NewServer(c CompletedConfig) (*Server, error) {
s := &Server{
CompletedConfig: c,
}
- return s, nil
-}
-func (s *Server) Complete(ctx context.Context) (*genericapiserver.GenericAPIServer, error) {
- logger := klog.FromContext(ctx).WithValues("component", "cache-server")
- server, err := s.ApiExtensions.New(genericapiserver.NewEmptyDelegate())
+ var err error
+ s.apiextensions, err = s.ApiExtensions.New(genericapiserver.NewEmptyDelegate())
if err != nil {
return nil, err
}
- if err := server.GenericAPIServer.AddPostStartHook("bootstrap-cache-server", func(hookContext genericapiserver.PostStartHookContext) error {
+
+ return s, nil
+}
+
+// preparedGenericAPIServer is a private wrapper that enforces a call of PrepareRun() before Run can be invoked.
+type preparedServer struct {
+ *Server
+}
+
+func (s *Server) PrepareRun(ctx context.Context) (preparedServer, error) {
+ logger := klog.FromContext(ctx).WithValues("component", "cache-server")
+ if err := s.apiextensions.GenericAPIServer.AddPostStartHook("bootstrap-cache-server", func(hookContext genericapiserver.PostStartHookContext) error {
logger = logger.WithValues("postStartHook", "bootstrap-cache-server")
- if err = bootstrap.Bootstrap(klog.NewContext(util.GoContext(hookContext), logger), s.ApiExtensionsClusterClient); err != nil {
+ if err := bootstrap.Bootstrap(klog.NewContext(util.GoContext(hookContext), logger), s.ApiExtensionsClusterClient); err != nil {
logger.Error(err, "failed creating the static CustomResourcesDefinitions")
// nolint:nilerr
return nil // don't klog.Fatal. This only happens when context is cancelled.
}
return nil
}); err != nil {
- return nil, err
+ return preparedServer{}, err
}
- if err := server.GenericAPIServer.AddPostStartHook("cache-server-start-informers", func(hookContext genericapiserver.PostStartHookContext) error {
+ if err := s.apiextensions.GenericAPIServer.AddPostStartHook("cache-server-start-informers", func(hookContext genericapiserver.PostStartHookContext) error {
logger := logger.WithValues("postStartHook", "cache-server-start-informers")
s.ApiExtensionsSharedInformerFactory.Start(hookContext.StopCh)
select {
@@ -66,16 +77,12 @@ func (s *Server) Complete(ctx context.Context) (*genericapiserver.GenericAPIServ
logger.Info("finished starting kube informers")
return nil
}); err != nil {
- return nil, err
+ return preparedServer{}, err
}
- return server.GenericAPIServer, nil
+ return preparedServer{s}, nil
}
-func (s *Server) Run(ctx context.Context) error {
- completedServer, err := s.Complete(ctx)
- if err != nil {
- return err
- }
- return completedServer.PrepareRun().Run(ctx.Done())
+func (s preparedServer) Run(ctx context.Context) error {
+ return s.apiextensions.GenericAPIServer.PrepareRun().Run(ctx.Done())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment