Skip to content

Commit f057ffd

Browse files
committed
Move controller manager build function to pkg/epp/server so we can better test it
1 parent 430ff72 commit f057ffd

File tree

2 files changed

+80
-41
lines changed

2 files changed

+80
-41
lines changed

Diff for: cmd/epp/main.go

+2-41
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,12 @@ import (
3030
"go.uber.org/zap/zapcore"
3131
"google.golang.org/grpc"
3232
healthPb "google.golang.org/grpc/health/grpc_health_v1"
33-
corev1 "k8s.io/api/core/v1"
34-
"k8s.io/apimachinery/pkg/fields"
35-
"k8s.io/apimachinery/pkg/runtime"
36-
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
37-
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
3833
"k8s.io/client-go/rest"
3934
"k8s.io/component-base/metrics/legacyregistry"
4035
ctrl "sigs.k8s.io/controller-runtime"
41-
"sigs.k8s.io/controller-runtime/pkg/cache"
42-
"sigs.k8s.io/controller-runtime/pkg/client"
4336
"sigs.k8s.io/controller-runtime/pkg/log/zap"
4437
"sigs.k8s.io/controller-runtime/pkg/manager"
4538
"sigs.k8s.io/controller-runtime/pkg/metrics/filters"
46-
"sigs.k8s.io/gateway-api-inference-extension/api/v1alpha2"
4739
"sigs.k8s.io/gateway-api-inference-extension/internal/runnable"
4840
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/backend"
4941
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/backend/vllm"
@@ -101,15 +93,9 @@ var (
10193
"are assumed to be named tls.crt and tls.key, respectively. If not set, and secureServing is enabled, "+
10294
"then a self-signed certificate is used.")
10395

104-
scheme = runtime.NewScheme()
10596
setupLog = ctrl.Log.WithName("setup")
10697
)
10798

108-
func init() {
109-
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
110-
utilruntime.Must(v1alpha2.AddToScheme(scheme))
111-
}
112-
11399
func main() {
114100
if err := run(); err != nil {
115101
os.Exit(1)
@@ -144,34 +130,9 @@ func run() error {
144130
return err
145131
}
146132

147-
mgr, err := ctrl.NewManager(cfg, ctrl.Options{
148-
Scheme: scheme,
149-
Cache: cache.Options{
150-
ByObject: map[client.Object]cache.ByObject{
151-
&corev1.Pod{}: {
152-
Namespaces: map[string]cache.Config{
153-
*poolNamespace: {},
154-
},
155-
},
156-
&v1alpha2.InferencePool{}: {
157-
Namespaces: map[string]cache.Config{
158-
*poolNamespace: {
159-
FieldSelector: fields.SelectorFromSet(fields.Set{
160-
"metadata.name": *poolName,
161-
}),
162-
},
163-
},
164-
},
165-
&v1alpha2.InferenceModel{}: {
166-
Namespaces: map[string]cache.Config{
167-
*poolNamespace: {},
168-
},
169-
},
170-
},
171-
},
172-
})
133+
mgr, err := runserver.NewDefaultManager(*poolNamespace, *poolName)
173134
if err != nil {
174-
setupLog.Error(err, "Failed to create controller manager", "config", cfg)
135+
setupLog.Error(err, "Failed to create controller manager")
175136
return err
176137
}
177138

Diff for: pkg/epp/server/controller_manager.go

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
Copyright 2025 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package server
18+
19+
import (
20+
"fmt"
21+
22+
corev1 "k8s.io/api/core/v1"
23+
"k8s.io/apimachinery/pkg/fields"
24+
"k8s.io/apimachinery/pkg/runtime"
25+
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
26+
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
27+
ctrl "sigs.k8s.io/controller-runtime"
28+
"sigs.k8s.io/controller-runtime/pkg/cache"
29+
"sigs.k8s.io/controller-runtime/pkg/client"
30+
"sigs.k8s.io/gateway-api-inference-extension/api/v1alpha2"
31+
)
32+
33+
var scheme = runtime.NewScheme()
34+
35+
func init() {
36+
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
37+
utilruntime.Must(v1alpha2.AddToScheme(scheme))
38+
}
39+
40+
// NewDefaultManager creates a new controller manager with default configuration.
41+
func NewDefaultManager(namespace, name string) (ctrl.Manager, error) {
42+
// Init runtime.
43+
cfg, err := ctrl.GetConfig()
44+
if err != nil {
45+
return nil, fmt.Errorf("failed to create rest config: %v", err)
46+
}
47+
48+
manager, err := ctrl.NewManager(cfg, ctrl.Options{
49+
Scheme: scheme,
50+
Cache: cache.Options{
51+
ByObject: map[client.Object]cache.ByObject{
52+
&corev1.Pod{}: {
53+
Namespaces: map[string]cache.Config{
54+
namespace: {},
55+
},
56+
},
57+
&v1alpha2.InferencePool{}: {
58+
Namespaces: map[string]cache.Config{
59+
namespace: {
60+
FieldSelector: fields.SelectorFromSet(fields.Set{
61+
"metadata.name": name,
62+
}),
63+
},
64+
},
65+
},
66+
&v1alpha2.InferenceModel{}: {
67+
Namespaces: map[string]cache.Config{
68+
namespace: {},
69+
},
70+
},
71+
},
72+
},
73+
})
74+
if err != nil {
75+
return nil, fmt.Errorf("failed to create controller manager: %v", err)
76+
}
77+
return manager, nil
78+
}

0 commit comments

Comments
 (0)