package config import ( "errors" "os" "github.com/spf13/viper" ) type Configuration struct { IpList []string `yaml:"ipList"` //IP list PortList []string `yaml:"portList"` //port list PrivateKeys []string `yaml:"privateKeys"` PublicKeys []string `yaml:"publicKeys"` VrfPrivateKeys []string `yaml:"vrfPrivateKeys"` VrfPublicKeys []string `yaml:"vrfPublicKeys"` GenesisFilePath string `yaml:"genesisFilePath"` NodeIndex int `yaml:"nodeIndex"` viper *viper.Viper } func NewConfiguration(configPath string) (*Configuration, error) { if _, err := os.Stat(configPath); err != nil { // no existing file if os.IsNotExist(err) { return nil, errors.New(" config file not found ") } else { return nil, err } } reader := viper.New() reader.SetConfigFile(configPath) if err := reader.ReadInConfig(); err != nil { return nil, err } configuration := new(Configuration) err := reader.Unmarshal(configuration) if err != nil { return nil, err } configuration.viper = reader return configuration, nil } func (c *Configuration) GetAttribute(attrName string) interface{} { return c.viper.Get(attrName) }