@@ -18,13 +18,17 @@ package controller
1818
1919import (
2020 "context"
21+ "fmt"
2122
2223 "k8s.io/apimachinery/pkg/api/errors"
24+ "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2325 ctrl "sigs.k8s.io/controller-runtime"
2426 "sigs.k8s.io/controller-runtime/pkg/client"
2527 "sigs.k8s.io/controller-runtime/pkg/log"
2628
2729 v1 "sigs.k8s.io/gateway-api-inference-extension/api/v1"
30+ "sigs.k8s.io/gateway-api-inference-extension/apix/v1alpha2"
31+ "sigs.k8s.io/gateway-api-inference-extension/pkg/common"
2832 "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/datastore"
2933 logutil "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/util/logging"
3034)
@@ -35,31 +39,72 @@ import (
3539type InferencePoolReconciler struct {
3640 client.Reader
3741 Datastore datastore.Datastore
42+ PoolGKNN common.GKNN
3843}
3944
4045func (c * InferencePoolReconciler ) Reconcile (ctx context.Context , req ctrl.Request ) (ctrl.Result , error ) {
41- logger := log .FromContext (ctx ).WithValues ("inferencePool" , req .NamespacedName ).V (logutil .DEFAULT )
46+ logger := log .FromContext (ctx ).WithValues ("group" , c . PoolGKNN . Group , " inferencePool" , req .NamespacedName ).V (logutil .DEFAULT )
4247 ctx = ctrl .LoggerInto (ctx , logger )
4348
44- logger .Info ("Reconciling InferencePool" )
49+ logger .Info ("Reconciling InferencePool" , "group" , c . PoolGKNN . Group , "inferencePool" , req . NamespacedName )
4550
46- infPool := & v1.InferencePool {}
51+ // 1. Initialize a generic client.Object based on the group.
52+ var obj client.Object
53+ switch c .PoolGKNN .Group {
54+ case v1 .GroupName :
55+ obj = & v1.InferencePool {}
56+ case v1alpha2 .GroupName :
57+ obj = & v1alpha2.InferencePool {}
58+ default :
59+ // Handle unsupported groups gracefully.
60+ err := fmt .Errorf ("unsupported API group: %s" , c .PoolGKNN .Group )
61+ logger .Error (err , "Cannot reconcile InferencePool" )
62+ return ctrl.Result {}, err
63+ }
4764
48- if err := c .Get (ctx , req .NamespacedName , infPool ); err != nil {
65+ // 2. Perform a single, generic fetch for the object.
66+ if err := c .Get (ctx , req .NamespacedName , obj ); err != nil {
4967 if errors .IsNotFound (err ) {
5068 logger .Info ("InferencePool not found. Clearing the datastore" )
5169 c .Datastore .Clear ()
5270 return ctrl.Result {}, nil
5371 }
5472 logger .Error (err , "Unable to get InferencePool" )
5573 return ctrl.Result {}, err
56- } else if ! infPool .DeletionTimestamp .IsZero () {
74+ }
75+
76+ // 3. Perform common checks using the client.Object interface.
77+ if ! obj .GetDeletionTimestamp ().IsZero () {
5778 logger .Info ("InferencePool is marked for deletion. Clearing the datastore" )
5879 c .Datastore .Clear ()
5980 return ctrl.Result {}, nil
6081 }
61- // update pool in datastore
62- if err := c .Datastore .PoolSet (ctx , c .Reader , infPool ); err != nil {
82+
83+ // 4. Convert the fetched object to the canonical v1.InferencePool.
84+ var v1infPool * v1.InferencePool
85+
86+ switch pool := obj .(type ) {
87+ case * v1.InferencePool :
88+ // If it's already a v1 object, just use it.
89+ v1infPool = pool
90+ case * v1alpha2.InferencePool :
91+ // If it's a v1alpha2 object, convert it to v1.
92+ var uns * unstructured.Unstructured
93+ uns , err := common .ToUnstructured (pool )
94+ if err != nil {
95+ logger .Error (err , "Failed to convert inferencePool to unstructured" )
96+ return ctrl.Result {}, err
97+ }
98+ v1infPool , err = common .ToInferencePool (uns )
99+ if err != nil {
100+ logger .Error (err , "Failed to convert unstructured to inferencePool" )
101+ return ctrl.Result {}, err
102+ }
103+ default :
104+ return ctrl.Result {}, fmt .Errorf ("unsupported API group: %s" , c .PoolGKNN .Group )
105+ }
106+
107+ if err := c .Datastore .PoolSet (ctx , c .Reader , v1infPool ); err != nil {
63108 logger .Error (err , "Failed to update datastore" )
64109 return ctrl.Result {}, err
65110 }
@@ -68,7 +113,16 @@ func (c *InferencePoolReconciler) Reconcile(ctx context.Context, req ctrl.Reques
68113}
69114
70115func (c * InferencePoolReconciler ) SetupWithManager (mgr ctrl.Manager ) error {
71- return ctrl .NewControllerManagedBy (mgr ).
72- For (& v1.InferencePool {}).
73- Complete (c )
116+ switch c .PoolGKNN .Group {
117+ case v1alpha2 .GroupName :
118+ return ctrl .NewControllerManagedBy (mgr ).
119+ For (& v1alpha2.InferencePool {}).
120+ Complete (c )
121+ case v1 .GroupName :
122+ return ctrl .NewControllerManagedBy (mgr ).
123+ For (& v1.InferencePool {}).
124+ Complete (c )
125+ default :
126+ return fmt .Errorf ("unknown group %s" , c .PoolGKNN .Group )
127+ }
74128}
0 commit comments