Skip to content

get read-only common configs for custom application #1596

Open
@kamauz

Description

@kamauz

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)
............

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions