@@ -12,6 +12,7 @@ import (
1212
1313 "github.com/openshift/cluster-ingress-operator/pkg/operator/controller"
1414
15+ apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
1516 "k8s.io/apimachinery/pkg/api/errors"
1617 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1718 "k8s.io/apimachinery/pkg/types"
@@ -38,7 +39,13 @@ func (r *reconciler) ensureIstio(ctx context.Context, gatewayclass *gatewayapiv1
3839 Name : gatewayclass .Name ,
3940 UID : gatewayclass .UID ,
4041 }
41- desired := desiredIstio (name , ownerRef )
42+
43+ enableInferenceExtension , err := r .inferencepoolCrdExists (ctx )
44+ if err != nil {
45+ return have , current , err
46+ }
47+
48+ desired := desiredIstio (name , ownerRef , enableInferenceExtension )
4249
4350 switch {
4451 case ! have :
@@ -56,8 +63,40 @@ func (r *reconciler) ensureIstio(ctx context.Context, gatewayclass *gatewayapiv1
5663 return true , current , nil
5764}
5865
66+ // inferencepoolCrdExists returns a Boolean value indicating whether the
67+ // InferencePool CRD exists under the inference.networking.k8s.io or
68+ // inference.networking.x-k8s.io API group.
69+ func (r * reconciler ) inferencepoolCrdExists (ctx context.Context ) (bool , error ) {
70+ if v , err := r .crdExists (ctx , inferencepoolCrdName ); err != nil {
71+ return false , err
72+ } else if v {
73+ return true , nil
74+ }
75+
76+ if v , err := r .crdExists (ctx , inferencepoolExperimentalCrdName ); err != nil {
77+ return false , err
78+ } else if v {
79+ return true , nil
80+ }
81+
82+ return false , nil
83+ }
84+
85+ // crdExists returns a Boolean value indicating whether the named CRD exists.
86+ func (r * reconciler ) crdExists (ctx context.Context , crdName string ) (bool , error ) {
87+ namespacedName := types.NamespacedName {Name : crdName }
88+ var crd apiextensionsv1.CustomResourceDefinition
89+ if err := r .cache .Get (ctx , namespacedName , & crd ); err != nil {
90+ if errors .IsNotFound (err ) {
91+ return false , nil
92+ }
93+ return false , fmt .Errorf ("failed to get CRD %s: %w" , crdName , err )
94+ }
95+ return true , nil
96+ }
97+
5998// desiredIstio returns the desired Istio CR.
60- func desiredIstio (name types.NamespacedName , ownerRef metav1.OwnerReference ) * sailv1.Istio {
99+ func desiredIstio (name types.NamespacedName , ownerRef metav1.OwnerReference , enableInferenceExtension bool ) * sailv1.Istio {
61100 pilotContainerEnv := map [string ]string {
62101 // Enable Gateway API.
63102 "PILOT_ENABLE_GATEWAY_API" : "true" ,
@@ -106,6 +145,9 @@ func desiredIstio(name types.NamespacedName, ownerRef metav1.OwnerReference) *sa
106145 // service annotations.
107146 "PILOT_ENABLE_GATEWAY_API_COPY_LABELS_ANNOTATIONS" : "false" ,
108147 }
148+ if enableInferenceExtension {
149+ pilotContainerEnv ["ENABLE_GATEWAY_API_INFERENCE_EXTENSION" ] = "true"
150+ }
109151 return & sailv1.Istio {
110152 ObjectMeta : metav1.ObjectMeta {
111153 Namespace : name .Namespace ,
0 commit comments