func LoadConfig()

in internal/beatcmd/config.go [67:119]


func LoadConfig(opts ...LoadConfigOption) (*Config, *config.C, libkeystore.Keystore, error) {
	var loadConfigOptions loadConfigOptions
	for _, opt := range opts {
		opt(&loadConfigOptions)
	}

	cfg, err := cfgfile.Load("", nil)
	if err != nil {
		return nil, nil, nil, fmt.Errorf("error loading config file: %w", err)
	}
	for _, mc := range loadConfigOptions.mergeConfig {
		if err := cfg.Merge(mc); err != nil {
			return nil, nil, nil, fmt.Errorf("error merging config: %w", err)
		}
	}
	if err := initPaths(cfg); err != nil {
		return nil, nil, nil, err
	}

	keystore, err := loadKeystore(cfg)
	if err != nil {
		return nil, nil, nil, fmt.Errorf("could not initialize the keystore: %w", err)
	}

	configOpts := []ucfg.Option{ucfg.PathSep(".")}
	if loadConfigOptions.disableConfigResolution {
		configOpts = append(configOpts, ucfg.ResolveNOOP)
	} else {
		configOpts = append(configOpts,
			ucfg.ResolveEnv,
			ucfg.VarExp,
		)
		if keystore != nil {
			configOpts = append(configOpts,
				ucfg.Resolve(libkeystore.ResolverWrap(keystore)),
			)
		}
	}
	config.OverwriteConfigOpts(configOpts)

	if err := cloudid.OverwriteSettings(cfg); err != nil {
		return nil, nil, nil, err
	}

	var config Config
	if err := validateConfig(cfg); err != nil {
		return nil, nil, nil, fmt.Errorf("invalid config: %w", err)
	}
	if err := cfg.Unpack(&config); err != nil {
		return nil, nil, nil, fmt.Errorf("error unpacking config data: %w", err)
	}
	return &config, cfg, keystore, nil
}