func XDSFeatures()

in grpc-xds/control-plane-go/pkg/config/xds_features.go [39:60]


func XDSFeatures(logger logr.Logger) (*xds.Features, error) {
	configDir, exists := os.LookupEnv("CONFIG_DIR")
	if !exists {
		configDir = defaultConfigDir
	}
	xdsFeaturesConfigFilePath := filepath.Join(configDir, xdsFeaturesConfigFile)
	logger.V(4).Info("Loading xDS feature flags", "filepath", xdsFeaturesConfigFilePath)
	yamlBytes, err := os.ReadFile(xdsFeaturesConfigFilePath)
	if err != nil {
		return nil, fmt.Errorf("could not read xDS feature flags from file %s: %w", xdsFeaturesConfigFilePath, err)
	}
	var xdsFeatures xds.Features
	err = yaml.Unmarshal(yamlBytes, &xdsFeatures)
	if err != nil {
		return nil, fmt.Errorf("could not unmarshall xDS feature flags YAML file contents [%s]: %w", yamlBytes, err)
	}
	if err := validateXDSFeatureFlags(xdsFeatures); err != nil {
		return nil, fmt.Errorf("xDS feature flags validation failed: %w", err)
	}
	logger.V(2).Info("xDS features", "flags", xdsFeatures)
	return &xdsFeatures, err
}