package main import ( "fmt" "log" "github.com/spf13/viper" ) // Config definition type Config struct { hostname string `mapstructure:"hostname"` boards []*Board `flow,mapstructure:"boards"` } // Configuration container var Configuration Config func init() { viper.SetConfigName("openpdu") // name of config file (without extension) viper.SetConfigType("yaml") // type of config file viper.AddConfigPath("/etc/openpdu/") // path to look for the config file in viper.AddConfigPath(".") // optionally look for config in the working directory err := viper.ReadInConfig() // Find and read the config file if err != nil { // Handle errors reading the config file log.Printf("Fatal error config file: %s \n", err) } viper.SetDefault("hostname", "openpdu1") br := viper.Get("boards").([]interface{}) for k, v := range br { log.Printf("Key: %v", k) log.Printf(" Value: %v", v) var ba Board viper.UnmarshalKey("boards."+string(k), ba) log.Printf(" Valueid: %v", ba.ID) } log.Printf("basdo: %v", viper.Get("boards[0]")) log.Printf("todo: %v", viper.AllSettings()) Configuration := Config{} err = viper.Unmarshal(&Configuration) if err != nil { fmt.Printf("unable to decode into config struct, %v", err) } viper.WriteConfigAs("openpdu_out.yaml") log.Printf("All settings - hostname: %v \n", Configuration.hostname) for idx, b := range Configuration.boards { log.Printf("b %v: %v (%v)", idx, b.Name, b.Type) } // var b []Board // var brd Board // b = viper.Get("boards").([]Board) // for brd := range viper.Get("boards") { // log.Printf("brd: %v", brd) // } // log.Printf("bo: %v", viper.Get("boards")) // log.Printf("bo: %v", b) log.Printf("cfg: %v", Configuration) log.Printf("cfgb: %v", Configuration.boards) } func writeConfig() { viper.SetConfigName("openpdu") // name of config file (without extension) viper.SetConfigType("yaml") viper.AddConfigPath("/etc/openpdu/") // path to look for the config file in viper.SetDefault("hostname", "openpdu") err := viper.WriteConfig() if err != nil { // Handle errors reading the config file log.Printf("Fatato error config file: %s \n", err) } log.Printf("ok credo \n") }