Skip to content

Commit 67f2a25

Browse files
committed
nimservice controller DRA resource validations
Signed-off-by: Varun Ramachandra Sekar <[email protected]>
1 parent 8f83a60 commit 67f2a25

20 files changed

+441
-220
lines changed

cmd/main.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
// to ensure that exec-entrypoint and run can make use of them.
2727
"k8s.io/apimachinery/pkg/runtime"
2828
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
29+
discovery "k8s.io/client-go/discovery"
2930
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
3031
_ "k8s.io/client-go/plugin/pkg/client/auth"
3132
ctrl "sigs.k8s.io/controller-runtime"
@@ -147,6 +148,12 @@ func main() {
147148

148149
updater := conditions.NewUpdater(mgr.GetClient())
149150

151+
discoveryClient, err := discovery.NewDiscoveryClientForConfig(ctrl.GetConfigOrDie())
152+
if err != nil {
153+
setupLog.Error(err, "unable to create discovery client")
154+
os.Exit(1)
155+
}
156+
150157
if err = controller.NewNIMCacheReconciler(
151158
mgr.GetClient(),
152159
mgr.GetScheme(),
@@ -161,6 +168,7 @@ func main() {
161168
mgr.GetClient(),
162169
mgr.GetScheme(),
163170
updater,
171+
discoveryClient,
164172
render.NewRenderer("/manifests"),
165173
ctrl.Log.WithName("controllers").WithName("NIMService"),
166174
platformImpl,

internal/conditions/conditions.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ const (
6767
ReasonNIMCacheNotFound = "NIMCacheNotFound"
6868
// ReasonNIMCacheNotReady indicates that the NIMCache is not ready.
6969
ReasonNIMCacheNotReady = "NIMCacheNotReady"
70+
// ReasonDRAResourcesUnsupported indicates that the DRA resources are not supported on this cluster version.
71+
ReasonDRAResourcesUnsupported = "DRAResourcesUnsupported"
7072
)
7173

7274
// Updater is the condition updater.

internal/controller/nemo_datastore_controller.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3333
"k8s.io/apimachinery/pkg/runtime"
3434
"k8s.io/apimachinery/pkg/types"
35+
"k8s.io/client-go/discovery"
3536
"k8s.io/client-go/rest"
3637
"k8s.io/client-go/tools/record"
3738
"k8s.io/utils/ptr"
@@ -197,6 +198,11 @@ func (r *NemoDatastoreReconciler) GetUpdater() conditions.Updater {
197198
return r.updater
198199
}
199200

201+
// GetDiscoveryClient returns the discovery client instance.
202+
func (r *NemoDatastoreReconciler) GetDiscoveryClient() discovery.DiscoveryInterface {
203+
return nil
204+
}
205+
200206
// GetRenderer returns the renderer instance.
201207
func (r *NemoDatastoreReconciler) GetRenderer() render.Renderer {
202208
return r.renderer

internal/controller/nemo_entitystore_controller.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3333
"k8s.io/apimachinery/pkg/runtime"
3434
"k8s.io/apimachinery/pkg/types"
35+
"k8s.io/client-go/discovery"
3536
"k8s.io/client-go/rest"
3637
"k8s.io/client-go/tools/record"
3738
ctrl "sigs.k8s.io/controller-runtime"
@@ -196,6 +197,11 @@ func (r *NemoEntitystoreReconciler) GetUpdater() conditions.Updater {
196197
return r.updater
197198
}
198199

200+
// GetDiscoveryClient returns the discovery client instance.
201+
func (r *NemoEntitystoreReconciler) GetDiscoveryClient() discovery.DiscoveryInterface {
202+
return nil
203+
}
204+
199205
// GetRenderer returns the renderer instance.
200206
func (r *NemoEntitystoreReconciler) GetRenderer() render.Renderer {
201207
return r.renderer

internal/controller/nemo_evaluator_controller.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3434
"k8s.io/apimachinery/pkg/runtime"
3535
"k8s.io/apimachinery/pkg/types"
36+
"k8s.io/client-go/discovery"
3637
"k8s.io/client-go/rest"
3738
"k8s.io/client-go/tools/record"
3839
ctrl "sigs.k8s.io/controller-runtime"
@@ -197,6 +198,11 @@ func (r *NemoEvaluatorReconciler) GetUpdater() conditions.Updater {
197198
return r.updater
198199
}
199200

201+
// GetDiscoveryClient returns the discovery client instance.
202+
func (r *NemoEvaluatorReconciler) GetDiscoveryClient() discovery.DiscoveryInterface {
203+
return nil
204+
}
205+
200206
// GetRenderer returns the renderer instance.
201207
func (r *NemoEvaluatorReconciler) GetRenderer() render.Renderer {
202208
return r.renderer

internal/controller/nemo_guardrail_controller.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3333
"k8s.io/apimachinery/pkg/runtime"
3434
"k8s.io/apimachinery/pkg/types"
35+
"k8s.io/client-go/discovery"
3536
"k8s.io/client-go/rest"
3637
"k8s.io/client-go/tools/record"
3738
ctrl "sigs.k8s.io/controller-runtime"
@@ -197,6 +198,11 @@ func (r *NemoGuardrailReconciler) GetUpdater() conditions.Updater {
197198
return r.updater
198199
}
199200

201+
// GetDiscoveryClient returns the discovery client instance.
202+
func (r *NemoGuardrailReconciler) GetDiscoveryClient() discovery.DiscoveryInterface {
203+
return nil
204+
}
205+
200206
// GetRenderer returns the renderer instance.
201207
func (r *NemoGuardrailReconciler) GetRenderer() render.Renderer {
202208
return r.renderer

internal/controller/nemocustomizer_controller.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3636
"k8s.io/apimachinery/pkg/runtime"
3737
"k8s.io/apimachinery/pkg/types"
38+
"k8s.io/client-go/discovery"
3839
"k8s.io/client-go/rest"
3940
"k8s.io/client-go/tools/record"
4041
ctrl "sigs.k8s.io/controller-runtime"
@@ -209,6 +210,11 @@ func (r *NemoCustomizerReconciler) GetUpdater() conditions.Updater {
209210
return r.updater
210211
}
211212

213+
// GetDiscoveryClient returns the discovery client instance.
214+
func (r *NemoCustomizerReconciler) GetDiscoveryClient() discovery.DiscoveryInterface {
215+
return nil
216+
}
217+
212218
// GetRenderer returns the renderer instance.
213219
func (r *NemoCustomizerReconciler) GetRenderer() render.Renderer {
214220
return r.renderer

internal/controller/nimcache_controller.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3737
"k8s.io/apimachinery/pkg/runtime"
3838
"k8s.io/apimachinery/pkg/types"
39+
"k8s.io/client-go/discovery"
3940
"k8s.io/client-go/kubernetes"
4041
"k8s.io/client-go/rest"
4142
"k8s.io/client-go/tools/record"
@@ -232,6 +233,11 @@ func (r *NIMCacheReconciler) GetUpdater() conditions.Updater {
232233
return r.updater
233234
}
234235

236+
// GetDiscoveryClient returns the discovery client instance.
237+
func (r *NIMCacheReconciler) GetDiscoveryClient() discovery.DiscoveryInterface {
238+
return nil
239+
}
240+
235241
// GetRenderer returns the renderer instance.
236242
func (r *NIMCacheReconciler) GetRenderer() render.Renderer {
237243
return nil

internal/controller/nimpipeline_controller_test.go

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,9 @@ import (
3131
"sigs.k8s.io/controller-runtime/pkg/client"
3232
"sigs.k8s.io/controller-runtime/pkg/client/fake"
3333

34-
utils "github.com/NVIDIA/k8s-nim-operator/internal/utils"
35-
36-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
37-
3834
corev1 "k8s.io/api/core/v1"
35+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
36+
"k8s.io/utils/ptr"
3937

4038
appsv1alpha1 "github.com/NVIDIA/k8s-nim-operator/api/apps/v1alpha1"
4139
)
@@ -87,7 +85,7 @@ var _ = Describe("NIMPipeline Controller", func() {
8785
Services: []appsv1alpha1.NIMServicePipelineSpec{
8886
{
8987
Name: "nim-llm-service",
90-
Enabled: utils.BoolPtr(true),
88+
Enabled: ptr.To(true),
9189
Spec: appsv1alpha1.NIMServiceSpec{
9290
Image: appsv1alpha1.Image{
9391
Repository: "llm-nim-container",
@@ -108,7 +106,7 @@ var _ = Describe("NIMPipeline Controller", func() {
108106
},
109107
{
110108
Name: "nim-embedding-service",
111-
Enabled: utils.BoolPtr(false),
109+
Enabled: ptr.To(false),
112110
Spec: appsv1alpha1.NIMServiceSpec{
113111
Image: appsv1alpha1.Image{
114112
Repository: "llm-embedding-container",
@@ -154,7 +152,7 @@ var _ = Describe("NIMPipeline Controller", func() {
154152
Services: []appsv1alpha1.NIMServicePipelineSpec{
155153
{
156154
Name: "nim-llm-service",
157-
Enabled: utils.BoolPtr(true),
155+
Enabled: ptr.To(true),
158156
Spec: appsv1alpha1.NIMServiceSpec{
159157
Image: appsv1alpha1.Image{
160158
Repository: "llm-nim-container",
@@ -175,7 +173,7 @@ var _ = Describe("NIMPipeline Controller", func() {
175173
},
176174
{
177175
Name: "nim-embedding-service",
178-
Enabled: utils.BoolPtr(false),
176+
Enabled: ptr.To(false),
179177
Spec: appsv1alpha1.NIMServiceSpec{
180178
Image: appsv1alpha1.Image{
181179
Repository: "llm-embedding-container",
@@ -198,7 +196,7 @@ var _ = Describe("NIMPipeline Controller", func() {
198196
namespacedName := types.NamespacedName{Name: "test-pipeline", Namespace: "default"}
199197
Expect(client.Get(context.TODO(), namespacedName, updatePipeline)).To(Succeed())
200198

201-
updatePipeline.Spec.Services[1].Enabled = utils.BoolPtr(true)
199+
updatePipeline.Spec.Services[1].Enabled = ptr.To(true)
202200
Expect(client.Update(ctx, updatePipeline)).To(Succeed())
203201

204202
// Reconcile the resource
@@ -214,7 +212,7 @@ var _ = Describe("NIMPipeline Controller", func() {
214212
}, time.Second*5, time.Millisecond*500).Should(BeTrue())
215213

216214
// Disable nim-llm-service in the pipeline spec
217-
updatePipeline.Spec.Services[0].Enabled = utils.BoolPtr(false)
215+
updatePipeline.Spec.Services[0].Enabled = ptr.To(false)
218216
Expect(client.Update(ctx, updatePipeline)).To(Succeed())
219217

220218
// Reconcile the resource
@@ -241,7 +239,7 @@ var _ = Describe("NIMPipeline Controller", func() {
241239
Services: []appsv1alpha1.NIMServicePipelineSpec{
242240
{
243241
Name: "nim-llm-service",
244-
Enabled: utils.BoolPtr(true),
242+
Enabled: ptr.To(true),
245243
Spec: appsv1alpha1.NIMServiceSpec{
246244
Image: appsv1alpha1.Image{
247245
Repository: "llm-nim-container",

internal/controller/nimservice_controller.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
resourcev1beta2 "k8s.io/api/resource/v1beta2"
3131
"k8s.io/apimachinery/pkg/runtime"
3232
"k8s.io/apimachinery/pkg/types"
33+
"k8s.io/client-go/discovery"
3334
"k8s.io/client-go/rest"
3435
"k8s.io/client-go/tools/record"
3536
ctrl "sigs.k8s.io/controller-runtime"
@@ -59,6 +60,7 @@ type NIMServiceReconciler struct {
5960
scheme *runtime.Scheme
6061
log logr.Logger
6162
updater conditions.Updater
63+
discoveryClient discovery.DiscoveryInterface
6264
renderer render.Renderer
6365
Config *rest.Config
6466
Platform platform.Platform
@@ -70,7 +72,7 @@ type NIMServiceReconciler struct {
7072
var _ shared.Reconciler = &NIMServiceReconciler{}
7173

7274
// NewNIMServiceReconciler creates a new reconciler for NIMService with the given platform.
73-
func NewNIMServiceReconciler(client client.Client, scheme *runtime.Scheme, updater conditions.Updater, renderer render.Renderer, log logr.Logger, platform platform.Platform) *NIMServiceReconciler {
75+
func NewNIMServiceReconciler(client client.Client, scheme *runtime.Scheme, updater conditions.Updater, discoveryClient discovery.DiscoveryInterface, renderer render.Renderer, log logr.Logger, platform platform.Platform) *NIMServiceReconciler {
7476
return &NIMServiceReconciler{
7577
Client: client,
7678
scheme: scheme,
@@ -196,6 +198,11 @@ func (r *NIMServiceReconciler) GetUpdater() conditions.Updater {
196198
return r.updater
197199
}
198200

201+
// GetDiscoveryClient returns the discovery client instance.
202+
func (r *NIMServiceReconciler) GetDiscoveryClient() discovery.DiscoveryInterface {
203+
return r.discoveryClient
204+
}
205+
199206
// GetRenderer returns the renderer instance.
200207
func (r *NIMServiceReconciler) GetRenderer() render.Renderer {
201208
return r.renderer

0 commit comments

Comments
 (0)