Skip to content

Commit 520a9ae

Browse files
committed
Load datalayer config from text to EPP config
Signed-off-by: Shmuel Kallner <kallner@il.ibm.com>
1 parent a7ed504 commit 520a9ae

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

pkg/epp/config/loader/configloader.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
173214
func 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

Comments
 (0)