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
}