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") // Loop through pier list conf := config.Conf() for _, pier := range conf.Piers { logger.Info(fmt.Sprintf("Loading pier %s", pier)) info, err := StartContainer(pier, "vere") if err != nil { logger.Error(fmt.Sprintf("Error starting %s: %v", pier, err)) continue } config.UpdateContainerState(pier, info) } 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 }