0 RU:Config
Vasiliy Tolstov edited this page 2021-11-21 01:40:23 +03:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Реализация интерфейса https://pkg.go.dev/go.unistack.org/micro/v3/config#Config

Конфиг источники представляют собой методы Save/Load/Watch для заполнения конфигурационного файла из различных источников.

Микросервис предоставляет возможность стекировать конфиг сурсы, а также динамически перенастраивать сервис в зависимости от значений конфигурационной структуры посредством метода Watch.

Наиболее известный вариант использования конфигурационных источников в следующем варианте

	cfg := appconfig.NewConfig(appName, AppVersion) // create new empty config

	if err := config.Load(ctx,
		[]config.Config{
			config.NewConfig( // load from defaults
				config.Struct(cfg), // pass config struct
			),
			fileconfig.NewConfig( // load from file
				config.AllowFail(true),             // that may be not exists
				config.Struct(cfg),                 // pass config struct
				config.Codec(jsoncodec.NewCodec()), // file config in json
				fileconfig.Path("./local.json"),    // nearby file
			),
			envconfig.NewConfig( // load from environment
				config.Struct(cfg), // pass config struct
			),
			vaultconfig.NewConfig(
				config.AllowFail(true),             // that may be not exists
				config.Struct(cfg),                 // load from vault
				config.Codec(jsoncodec.NewCodec()), // vault config in json
				config.BeforeLoad(func(ctx context.Context, c config.Config) error {
					return c.Init(
						vaultconfig.Address(cfg.Vault.Addr),
						vaultconfig.Token(cfg.Vault.Token),
						vaultconfig.Path(cfg.Vault.Path),
					)
				}),
			),
		}, config.LoadOverride(true),
	); err != nil {
		logger.Fatalf(ctx, "failed to load config: %v", err)
	}

В таком варианте создается стек из источников конфигурации, которые обрабатываются в указанном порядке.

  1. Конфигурационная структура заполняется параметрами по-умолчанию (параметры задаются посредством аннотаций к полям структуры)
  2. Чтение из локального файла в формате json/yaml/toml (удобно для локального тестирования)
  3. Чтение из переменных окружения (обычно используется в кубернетес для задания параметров для следующих конфигурационных источников)
  4. Чтение из vault конфигурационного файла в котором помимо прочего могут содержаться различные пароли и сертификаты

В конечном итоге существующие значения перезаписываются (опция config.LoadOverride(true)), для массивов или мап можно указать опцию для дополнения, вместо перезаписи значений.

Методы

func Load(context.Context, ...config.LoadOption) error