@@ -28,6 +28,7 @@ import (
2828
2929 configapi "sigs.k8s.io/gateway-api-inference-extension/apix/config/v1alpha1"
3030 "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/config"
31+ "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/datalayer"
3132 "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/plugins"
3233 "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/saturationdetector"
3334 "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling"
@@ -87,6 +88,11 @@ func LoadConfigPhaseTwo(rawConfig *configapi.EndpointPickerConfig, handle plugin
8788 }
8889 config .SaturationDetectorConfig = loadSaturationDetectorConfig (rawConfig .SaturationDetector )
8990
91+ config .DataConfig , err = loadDataLayerConfig (rawConfig .Data , rawConfig .FeatureGates , handle )
92+ if err != nil {
93+ return nil , err
94+ }
95+
9096 return config , nil
9197}
9298
@@ -170,6 +176,41 @@ func loadSaturationDetectorConfig(sd *configapi.SaturationDetector) *saturationd
170176 return & sdConfig
171177}
172178
179+ func loadDataLayerConfig (rawDataConfig * configapi.DataLayerConfig , rawFeatureGates configapi.FeatureGates , handle plugins.Handle ) (* datalayer.Config , error ) {
180+ featureGates := loadFeatureConfig (rawFeatureGates )
181+ if ! featureGates [datalayer .FeatureGate ] {
182+ return nil , nil
183+ }
184+
185+ if rawDataConfig == nil {
186+ return nil , errors .New ("the V2 Datalayer has been enabled. You must specify the Data section in the configuration" )
187+ }
188+
189+ dataConfig := datalayer.Config {
190+ Sources : []datalayer.DataSourceConfig {},
191+ }
192+ for _ , source := range rawDataConfig .Sources {
193+ if sourcePlugin , ok := handle .Plugin (source .PluginRef ).(datalayer.DataSource ); ok {
194+ sourceConfig := datalayer.DataSourceConfig {
195+ Plugin : sourcePlugin ,
196+ Extractors : []datalayer.Extractor {},
197+ }
198+ for _ , extractor := range source .Extractors {
199+ if extractorPlugin , ok := handle .Plugin (extractor ).(datalayer.Extractor ); ok {
200+ sourceConfig .Extractors = append (sourceConfig .Extractors , extractorPlugin )
201+ } else {
202+ return nil , fmt .Errorf ("the plugin %s is not a datalayer.Extractor" , source .PluginRef )
203+ }
204+ }
205+ dataConfig .Sources = append (dataConfig .Sources , sourceConfig )
206+ } else {
207+ return nil , fmt .Errorf ("the plugin %s is not a datalayer.Source" , source .PluginRef )
208+ }
209+ }
210+
211+ return & dataConfig , nil
212+ }
213+
173214func instantiatePlugins (configuredPlugins []configapi.PluginSpec , handle plugins.Handle ) error {
174215 pluginNames := sets .New [string ]() // set of plugin names, a name must be unique
175216
0 commit comments