package docker import ( "encoding/json" "fmt" "goseg/config" "goseg/structs" "io/ioutil" "path/filepath" "sync" ) var ( urbitsConfig = make(map[string]structs.UrbitDocker) urbitMutex sync.RWMutex ) func LoadUrbits() error { logger.Info("Loading Urbit ships") // Config struct conf := config.Conf() // Loop through pier list for _, pier := range conf.Piers { // load config if err := loadConfig(pier); err != nil { logger.Error(fmt.Sprintf("%v", err)) continue } } // apply latest version info (if automated updates) // start containers return nil } func Conf(pier string) structs.UrbitDocker { urbitMutex.Lock() defer urbitMutex.Unlock() return urbitsConfig[pier] } func loadConfig(pier string) error { urbitMutex.Lock() defer urbitMutex.Unlock() // pull docker info from json confPath := filepath.Join(config.BasePath, "settings", "pier", pier+".json") file, err := ioutil.ReadFile(confPath) if err != nil { errmsg := fmt.Sprintf("Unable to load %s config: %v", pier, err) return fmt.Errorf(errmsg) // Return an error instead of a string } // Unmarshal JSON var targetStruct structs.UrbitDocker if err := json.Unmarshal(file, &targetStruct); err != nil { errmsg := fmt.Sprintf("Error decoding %s JSON: %v", pier, err) return fmt.Errorf(errmsg) } // Store in var urbitsConfig[pier] = targetStruct return nil }