64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
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
|
|
}
|