Skip to content

RU:Config

Vasiliy Tolstov edited this page Nov 20, 2021 · 4 revisions

Реализация интерфейса 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

Clone this wiki locally