package config import ( "fmt" "time" "github.com/goccy/go-yaml" "gitlab.smoothnet.org/nhyatt/bind-response-policy-zone-creator/assets" "gitlab.smoothnet.org/nhyatt/bind-response-policy-zone-creator/internal/common" "gitlab.smoothnet.org/nhyatt/bind-response-policy-zone-creator/internal/log" ) func Init() (Config, error) { cfg := New() // parse config structure cfgInfo, err := getStructInfo(&cfg) if err != nil { return Config{}, err } // get command line flags if err := cfg.parseFlags(cfgInfo); err != nil { return Config{}, err } // set logging Level log.Init("text") log.SetNumericLevel(cfg.LogLevel) // set timezone & time format cfg.TZUTC, _ = time.LoadLocation("UTC") cfg.TZLocal, err = time.LoadLocation(cfg.TimeZoneLocal) if err != nil { return Config{}, err } // check config file if !common.FileExists(cfg.ConfigFileLocation) { if _, err := common.WriteFile(cfg.ConfigFileLocation, assets.Config); err != nil { return Config{}, err } return Config{}, fmt.Errorf("Unable to locate configuration file, an example config file has been written to %s", cfg.ConfigFileLocation) } // read config cfData, err := common.ReadFile(cfg.ConfigFileLocation) if err != nil { return Config{}, err } // unmarshal config file if err := yaml.Unmarshal(cfData, &cfg.ConfigFile); err != nil { return Config{}, err } // print running config printRunningConfig(&cfg, cfgInfo) // return configuration return cfg, nil }