Skip to content

Commit 7572643

Browse files
authored
typed fixture for keda scaledobject in e2e (llm-d#1038)
* typed fixture for keda Signed-off-by: Mohammed Abdi <mohammed.munir.abdi@ibm.com> * address review Signed-off-by: Mohammed Abdi <mohammed.munir.abdi@ibm.com> --------- Signed-off-by: Mohammed Abdi <mohammed.munir.abdi@ibm.com>
1 parent 2beb727 commit 7572643

6 files changed

Lines changed: 144 additions & 125 deletions

File tree

go.mod

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ module github.com/llm-d/llm-d-workload-variant-autoscaler
33
go 1.25.0
44

55
require (
6+
github.com/kedacore/keda/v2 v2.18.0
67
github.com/onsi/ginkgo/v2 v2.28.1
78
github.com/onsi/gomega v1.39.0
89
github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.89.0
@@ -19,6 +20,7 @@ require (
1920
require (
2021
github.com/Masterminds/semver/v3 v3.4.0 // indirect
2122
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
23+
github.com/expr-lang/expr v1.17.6 // indirect
2224
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
2325
github.com/gogo/protobuf v1.3.2 // indirect
2426
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
@@ -33,13 +35,14 @@ require (
3335
go.yaml.in/yaml/v2 v2.4.3 // indirect
3436
go.yaml.in/yaml/v3 v3.0.4 // indirect
3537
golang.org/x/mod v0.32.0 // indirect
38+
knative.dev/pkg v0.0.0-20250326102644-9f3e60a9244c // indirect
3639
sigs.k8s.io/randfill v1.0.0 // indirect
3740
sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482 // indirect
3841
)
3942

4043
require (
4144
cel.dev/expr v0.24.0 // indirect
42-
github.com/antlr4-go/antlr/v4 v4.13.0 // indirect
45+
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
4346
github.com/beorn7/perks v1.0.1 // indirect
4447
github.com/blang/semver/v4 v4.0.0 // indirect
4548
github.com/cespare/xxhash/v2 v2.3.0 // indirect
@@ -77,7 +80,7 @@ require (
7780
github.com/prometheus/procfs v0.17.0 // indirect
7881
github.com/spf13/cobra v1.10.0 // indirect
7982
github.com/spf13/pflag v1.0.10
80-
github.com/stoewer/go-strcase v1.3.0 // indirect
83+
github.com/stoewer/go-strcase v1.3.1 // indirect
8184
github.com/x448/float16 v0.8.4 // indirect
8285
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect
8386
go.opentelemetry.io/otel v1.38.0 // indirect
@@ -98,7 +101,7 @@ require (
98101
golang.org/x/text v0.33.0 // indirect
99102
golang.org/x/time v0.13.0 // indirect
100103
golang.org/x/tools v0.41.0 // indirect
101-
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
104+
gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect
102105
google.golang.org/genproto/googleapis/api v0.0.0-20250929231259-57b25ae835d4 // indirect
103106
google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 // indirect
104107
google.golang.org/grpc v1.76.0 // indirect

go.sum

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
22
cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
33
github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
44
github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
5-
github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI=
6-
github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g=
5+
github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ=
6+
github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw=
77
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
88
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
99
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
@@ -19,10 +19,12 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1
1919
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
2020
github.com/emicklei/go-restful/v3 v3.13.0 h1:C4Bl2xDndpU6nJ4bc1jXd+uTmYPVUwkD6bFY/oTyCes=
2121
github.com/emicklei/go-restful/v3 v3.13.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
22-
github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84=
23-
github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
22+
github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls=
23+
github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
2424
github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU=
2525
github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM=
26+
github.com/expr-lang/expr v1.17.6 h1:1h6i8ONk9cexhDmowO/A64VPxHScu7qfSl2k8OlINec=
27+
github.com/expr-lang/expr v1.17.6/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4=
2628
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
2729
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
2830
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
@@ -89,6 +91,8 @@ github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2E
8991
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
9092
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
9193
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
94+
github.com/kedacore/keda/v2 v2.18.0 h1:ttR223fii/4QJ0YvtrhcWHaEoezByb/t5CeFopjl6EI=
95+
github.com/kedacore/keda/v2 v2.18.0/go.mod h1:pw+qlQwMzj3T8LMayUnOtT15Gt1yRPF3lS1r5rt9F5k=
9296
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
9397
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
9498
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
@@ -156,8 +160,8 @@ github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
156160
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
157161
github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU=
158162
github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY=
159-
github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs=
160-
github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo=
163+
github.com/stoewer/go-strcase v1.3.1 h1:iS0MdW+kVTxgMoE1LAZyMiYJFKlOzLooE4MxjirtkAs=
164+
github.com/stoewer/go-strcase v1.3.1/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo=
161165
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
162166
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
163167
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
@@ -260,8 +264,8 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
260264
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
261265
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
262266
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
263-
gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw=
264-
gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY=
267+
gomodules.xyz/jsonpatch/v2 v2.5.0 h1:JELs8RLM12qJGXU4u/TO3V25KW8GreMKl9pdkk14RM0=
268+
gomodules.xyz/jsonpatch/v2 v2.5.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY=
265269
gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
266270
gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
267271
google.golang.org/genproto/googleapis/api v0.0.0-20250929231259-57b25ae835d4 h1:8XJ4pajGwOlasW+L13MnEGA8W4115jJySQtVfS2/IBU=
@@ -300,6 +304,8 @@ k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 h1:Y3gxNAuB0OBLImH611+UDZ
300304
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912/go.mod h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ=
301305
k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 h1:SjGebBtkBqHFOli+05xYbK8YF1Dzkbzn+gDM4X9T4Ck=
302306
k8s.io/utils v0.0.0-20251002143259-bc988d571ff4/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
307+
knative.dev/pkg v0.0.0-20250326102644-9f3e60a9244c h1:6IZwH1QHGfWlmfdy7svgDCPhRqWpisWK/Gcp8wdAwE0=
308+
knative.dev/pkg v0.0.0-20250326102644-9f3e60a9244c/go.mod h1:gx7Pp9NPcKYApNhR8m0KSOeg71pqhwPWhuhUJ6xCa2g=
303309
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2 h1:jpcvIRr3GLoUoEKRkHKSmGjxb6lWwrBlJsXc+eUYQHM=
304310
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
305311
sigs.k8s.io/controller-runtime v0.22.5 h1:v3nfSUMowX/2WMp27J9slwGFyAt7IV0YwBxAkrUr0GE=

test/e2e/fixtures/inference_objective.go

Lines changed: 63 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,19 @@ import (
44
"context"
55
"fmt"
66
"os"
7-
"reflect"
87
"strings"
98

9+
apiequality "k8s.io/apimachinery/pkg/api/equality"
1010
apierrors "k8s.io/apimachinery/pkg/api/errors"
1111
"k8s.io/apimachinery/pkg/api/meta"
1212
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1313
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
1414
"k8s.io/apimachinery/pkg/runtime/schema"
15-
"k8s.io/client-go/dynamic"
15+
"k8s.io/utils/ptr"
16+
"sigs.k8s.io/controller-runtime/pkg/client"
17+
infextv1alpha2 "sigs.k8s.io/gateway-api-inference-extension/apix/v1alpha2"
1618
)
1719

18-
var inferenceObjectiveGVR = schema.GroupVersionResource{
19-
Group: "inference.networking.x-k8s.io",
20-
Version: "v1alpha2",
21-
Resource: "inferenceobjectives",
22-
}
23-
2420
const defaultInferenceObjectiveName = "e2e-default"
2521

2622
// EnsureInferenceObjective creates the default InferenceObjective for GIE flow-control
@@ -29,43 +25,32 @@ const defaultInferenceObjectiveName = "e2e-default"
2925
//
3026
// Returns applied=true if the object exists or was created. If the InferenceObjective API is not
3127
// available on the cluster, returns (false, nil).
32-
func EnsureInferenceObjective(ctx context.Context, dc dynamic.Interface, namespace, poolName string) (applied bool, err error) {
33-
return EnsureInferenceObjectiveNamed(ctx, dc, namespace, defaultInferenceObjectiveName, poolName)
28+
func EnsureInferenceObjective(ctx context.Context, crClient client.Client, namespace, poolName string) (applied bool, err error) {
29+
return EnsureInferenceObjectiveNamed(ctx, crClient, namespace, defaultInferenceObjectiveName, poolName)
3430
}
3531

3632
// EnsureInferenceObjectiveNamed creates or updates a named InferenceObjective when the CRD exists.
37-
func EnsureInferenceObjectiveNamed(ctx context.Context, dc dynamic.Interface, namespace, objectiveName, poolName string) (applied bool, err error) {
38-
ri := dc.Resource(inferenceObjectiveGVR).Namespace(namespace)
39-
poolGroup, gErr := resolveInferencePoolGroup(ctx, dc, namespace, poolName)
33+
func EnsureInferenceObjectiveNamed(ctx context.Context, crClient client.Client, namespace, objectiveName, poolName string) (applied bool, err error) {
34+
poolGroup, gErr := resolveInferencePoolGroup(ctx, crClient, namespace, poolName)
4035
if gErr != nil {
4136
return false, gErr
4237
}
43-
obj := buildInferenceObjective(namespace, objectiveName, poolName, poolGroup)
38+
desired := buildInferenceObjective(namespace, objectiveName, poolName, poolGroup)
4439

45-
if _, cErr := ri.Create(ctx, obj, metav1.CreateOptions{}); cErr != nil {
40+
if cErr := crClient.Create(ctx, desired); cErr != nil {
4641
if apierrors.IsAlreadyExists(cErr) {
47-
current, getErr := ri.Get(ctx, objectiveName, metav1.GetOptions{})
42+
key := client.ObjectKey{Namespace: namespace, Name: objectiveName}
43+
current := &infextv1alpha2.InferenceObjective{}
44+
getErr := crClient.Get(ctx, key, current)
4845
if getErr != nil {
4946
return false, fmt.Errorf("get existing InferenceObjective %s: %w", objectiveName, getErr)
5047
}
51-
52-
currentSpec, _, specErr := unstructured.NestedMap(current.Object, "spec")
53-
if specErr != nil {
54-
return false, fmt.Errorf("read existing InferenceObjective spec: %w", specErr)
55-
}
56-
desiredSpec, _, desiredErr := unstructured.NestedMap(obj.Object, "spec")
57-
if desiredErr != nil {
58-
return false, fmt.Errorf("read desired InferenceObjective spec: %w", desiredErr)
59-
}
60-
if reflect.DeepEqual(currentSpec, desiredSpec) {
48+
if inferenceObjectiveSpecEqual(current.Spec, desired.Spec) {
6149
return true, nil
6250
}
63-
64-
if setErr := unstructured.SetNestedMap(current.Object, desiredSpec, "spec"); setErr != nil {
65-
return false, fmt.Errorf("set desired InferenceObjective spec: %w", setErr)
66-
}
67-
if _, uErr := ri.Update(ctx, current, metav1.UpdateOptions{}); uErr != nil {
68-
return false, fmt.Errorf("update InferenceObjective %s: %w", objectiveName, uErr)
51+
current.Spec = desired.Spec
52+
if upErr := crClient.Update(ctx, current); upErr != nil {
53+
return false, fmt.Errorf("update InferenceObjective %s: %w", objectiveName, upErr)
6954
}
7055
return true, nil
7156
}
@@ -78,40 +63,60 @@ func EnsureInferenceObjectiveNamed(ctx context.Context, dc dynamic.Interface, na
7863
}
7964

8065
// DeleteInferenceObjective removes the default InferenceObjective if present.
81-
func DeleteInferenceObjective(ctx context.Context, dc dynamic.Interface, namespace string) error {
82-
return DeleteInferenceObjectiveNamed(ctx, dc, namespace, defaultInferenceObjectiveName)
66+
func DeleteInferenceObjective(ctx context.Context, crClient client.Client, namespace string) error {
67+
return DeleteInferenceObjectiveNamed(ctx, crClient, namespace, defaultInferenceObjectiveName)
8368
}
8469

8570
// DeleteInferenceObjectiveNamed removes a named InferenceObjective if present.
86-
func DeleteInferenceObjectiveNamed(ctx context.Context, dc dynamic.Interface, namespace, objectiveName string) error {
87-
err := dc.Resource(inferenceObjectiveGVR).Namespace(namespace).Delete(ctx, objectiveName, metav1.DeleteOptions{})
71+
func DeleteInferenceObjectiveNamed(ctx context.Context, crClient client.Client, namespace, objectiveName string) error {
72+
err := crClient.Delete(ctx, &infextv1alpha2.InferenceObjective{
73+
ObjectMeta: metav1.ObjectMeta{
74+
Name: objectiveName,
75+
Namespace: namespace,
76+
},
77+
})
8878
if apierrors.IsNotFound(err) || inferenceObjectiveAPIMissing(err) {
8979
return nil
9080
}
9181
return err
9282
}
9383

94-
func buildInferenceObjective(namespace, objectiveName, poolName, poolGroup string) *unstructured.Unstructured {
95-
return &unstructured.Unstructured{
96-
Object: map[string]interface{}{
97-
"apiVersion": "inference.networking.x-k8s.io/v1alpha2",
98-
"kind": "InferenceObjective",
99-
"metadata": map[string]interface{}{
100-
"name": objectiveName,
101-
"namespace": namespace,
102-
},
103-
"spec": map[string]interface{}{
104-
"priority": int64(0),
105-
"poolRef": map[string]interface{}{
106-
"name": poolName,
107-
"kind": "InferencePool",
108-
"group": poolGroup,
109-
},
84+
func buildInferenceObjective(namespace, objectiveName, poolName, poolGroup string) *infextv1alpha2.InferenceObjective {
85+
return &infextv1alpha2.InferenceObjective{
86+
TypeMeta: metav1.TypeMeta{
87+
APIVersion: infextv1alpha2.SchemeGroupVersion.String(),
88+
Kind: "InferenceObjective",
89+
},
90+
ObjectMeta: metav1.ObjectMeta{
91+
Name: objectiveName,
92+
Namespace: namespace,
93+
},
94+
Spec: infextv1alpha2.InferenceObjectiveSpec{
95+
Priority: ptr.To(0),
96+
PoolRef: infextv1alpha2.PoolObjectReference{
97+
Group: infextv1alpha2.Group(poolGroup),
98+
Kind: infextv1alpha2.Kind("InferencePool"),
99+
Name: infextv1alpha2.ObjectName(poolName),
110100
},
111101
},
112102
}
113103
}
114104

105+
// inferenceObjectiveSpecEqual compares spec semantically (priority unset vs 0 matches).
106+
func inferenceObjectiveSpecEqual(a, b infextv1alpha2.InferenceObjectiveSpec) bool {
107+
return apiequality.Semantic.DeepEqual(
108+
normalizeInferenceObjectiveSpec(a),
109+
normalizeInferenceObjectiveSpec(b),
110+
)
111+
}
112+
113+
func normalizeInferenceObjectiveSpec(spec infextv1alpha2.InferenceObjectiveSpec) infextv1alpha2.InferenceObjectiveSpec {
114+
if spec.Priority == nil {
115+
spec.Priority = ptr.To(0)
116+
}
117+
return spec
118+
}
119+
115120
func inferenceObjectiveAPIMissing(err error) bool {
116121
if err == nil {
117122
return false
@@ -133,10 +138,10 @@ func inferenceObjectiveAPIMissing(err error) bool {
133138
if details == nil {
134139
return false
135140
}
136-
return details.Group == inferenceObjectiveGVR.Group && details.Kind == inferenceObjectiveGVR.Resource
141+
return details.Group == infextv1alpha2.GroupName && details.Kind == "inferenceobjectives"
137142
}
138143

139-
func resolveInferencePoolGroup(ctx context.Context, dc dynamic.Interface, namespace, poolName string) (string, error) {
144+
func resolveInferencePoolGroup(ctx context.Context, crClient client.Client, namespace, poolName string) (string, error) {
140145
if envPoolGroup := os.Getenv("POOL_GROUP"); envPoolGroup != "" {
141146
return envPoolGroup, nil
142147
}
@@ -147,7 +152,10 @@ func resolveInferencePoolGroup(ctx context.Context, dc dynamic.Interface, namesp
147152
}
148153

149154
for _, gvr := range inferencePoolCandidates {
150-
_, err := dc.Resource(gvr).Namespace(namespace).Get(ctx, poolName, metav1.GetOptions{})
155+
pool := &unstructured.Unstructured{}
156+
pool.SetAPIVersion(gvr.Group + "/" + gvr.Version)
157+
pool.SetKind("InferencePool")
158+
err := crClient.Get(ctx, client.ObjectKey{Namespace: namespace, Name: poolName}, pool)
151159
if err == nil {
152160
return gvr.Group, nil
153161
}

0 commit comments

Comments
 (0)