kuma

Форк
0
/
loader.go 
56 строк · 1.3 Кб
1
package config
2

3
import (
4
	"os"
5

6
	"github.com/kelseyhightower/envconfig"
7
	"github.com/pkg/errors"
8
	"sigs.k8s.io/yaml"
9

10
	"github.com/kumahq/kuma/pkg/core"
11
)
12

13
func Load(file string, cfg Config) error {
14
	return LoadWithOption(file, cfg, false, true, true)
15
}
16

17
func LoadWithOption(file string, cfg Config, strict bool, includeEnv bool, validate bool) error {
18
	if file == "" {
19
		core.Log.WithName("config").Info("skipping reading config from file")
20
	} else if err := loadFromFile(file, cfg, strict); err != nil {
21
		return err
22
	}
23

24
	if includeEnv {
25
		if err := envconfig.Process("", cfg); err != nil {
26
			return err
27
		}
28
	}
29

30
	if err := cfg.PostProcess(); err != nil {
31
		return errors.Wrap(err, "configuration post processing failed")
32
	}
33

34
	if validate {
35
		if err := cfg.Validate(); err != nil {
36
			return errors.Wrapf(err, "Invalid configuration")
37
		}
38
	}
39
	return nil
40
}
41

42
func loadFromFile(file string, cfg Config, strict bool) error {
43
	if _, err := os.Stat(file); err != nil {
44
		return errors.Errorf("Failed to access configuration file %q", file)
45
	}
46
	contents, err := os.ReadFile(file)
47
	if err != nil {
48
		return errors.Wrapf(err, "Failed to read configuration from file %q", file)
49
	}
50
	if strict {
51
		err = yaml.UnmarshalStrict(contents, cfg)
52
	} else {
53
		err = yaml.Unmarshal(contents, cfg)
54
	}
55
	return errors.Wrapf(err, "Failed to parse configuration from file %q", file)
56
}
57

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.