Open
Description
Situation:
- common configurations placed in a local yaml file
Goal:
- need to access the common configuration from the main function, in order to combine it with custom configs
(es. cdc with database credentials passed from a common configuration)
Given the following snippet of code, I need to populate config.ServiceConfig.Database with service.config.Database , however service properties are not accessible
func main() {
service, ok := pkg.NewAppServiceWithTargetType(serviceKey, &[]byte{})
if !ok {
service.LoggingClient().Errorf("App Service initialization failed for %s", serviceKey)
os.Exit(-1)
}
lc := service.LoggingClient()
config := config.ServiceConfig{}
////////////////////////////
// <---
// service.config.Database = service.config.Database (config is a private property, not accessible)
////////////////////////////
if err := service.LoadCustomConfig(&config, "CDC"); err != nil {
lc.Errorf("LoadCustomConfig returned error: %s", err.Error())
os.Exit(-1)
}
service.RegisterCustomTriggerFactory("cdc", func(config interfaces.TriggerConfig) (interfaces.Trigger, error) {
return trigger.NewCDCTrigger(config), nil
})
}
So I moved the focus on "LoadCustomConfig" function, but it would expect to read common configurations from a Consul.
Otherwise the private configuration is loaded as-is from the default path (res/configuration.yaml)
here's the code I'm referring to:
bootstrap/config/config.go
func (cp *Processor) LoadCustomConfigSection(updatableConfig interfaces.UpdatableConfig, sectionName string) error {
if cp.envVars == nil {
cp.envVars = environment.NewVariables(cp.lc)
}
configClient := container.ConfigClientFrom(cp.dic.Get)
// no Configuration provider specified
if configClient == nil {
/////////////// START /////////////////////
cp.lc.Info("Skipping use of Configuration Provider for custom configuration: Provider not available")
filePath := GetConfigFileLocation(cp.lc, cp.flags)
configMap, err := cp.loadConfigYamlFromFile(filePath)
if err != nil {
return err
}
err = utils.ConvertFromMap(configMap, updatableConfig)
if err != nil {
return fmt.Errorf("failed to convert custom configuration into service's configuration: %v", err)
}
/////////////// END /////////////////////
} else {
cp.lc.Infof("Checking if custom configuration ('%s') exists in Configuration Provider", sectionName)
exists, err := configClient.HasSubConfiguration(sectionName)
............