|
|
@@ -1,12 +1,19 @@
|
|
|
package docker
|
|
|
|
|
|
import (
|
|
|
+ "encoding/json"
|
|
|
"fmt"
|
|
|
"goseg/config"
|
|
|
+ "goseg/structs"
|
|
|
+ "io/ioutil"
|
|
|
+ "path/filepath"
|
|
|
"sync"
|
|
|
)
|
|
|
|
|
|
-var urbits = make(map[string]*sync.Mutex)
|
|
|
+var (
|
|
|
+ urbitsConfig = make(map[string]structs.UrbitDocker)
|
|
|
+ urbitMutex sync.RWMutex
|
|
|
+)
|
|
|
|
|
|
func LoadUrbits() error {
|
|
|
logger.Info("Loading Urbit ships")
|
|
|
@@ -16,8 +23,8 @@ func LoadUrbits() error {
|
|
|
for _, pier := range conf.Piers {
|
|
|
// load config
|
|
|
if err := loadConfig(pier); err != nil {
|
|
|
- errmsg := fmt.Sprintf("Unable to load config for %s: %v", patp, err)
|
|
|
- logger.Error(errmsg)
|
|
|
+ logger.Error(fmt.Sprintf("%v", err))
|
|
|
+ continue
|
|
|
}
|
|
|
}
|
|
|
// apply latest version info (if automated updates)
|
|
|
@@ -25,19 +32,29 @@ func LoadUrbits() error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+func Conf(pier string) structs.UrbitDocker {
|
|
|
+ urbitMutex.Lock()
|
|
|
+ defer urbitMutex.Unlock()
|
|
|
+ return urbitsConfig[pier]
|
|
|
+}
|
|
|
+
|
|
|
func loadConfig(pier string) error {
|
|
|
- fmt.Println(pier)
|
|
|
- /*
|
|
|
- // try loading existing config
|
|
|
- basePath, err := os.Getwd()
|
|
|
- if err != nil {
|
|
|
- errmsg := fmt.Sprintf("Couldn't get cwd: %v", err)
|
|
|
- logger.Error(errmsg)
|
|
|
- }
|
|
|
- pierConf := fmt.Sprintf("%s.json", pier)
|
|
|
- confPath := filepath.Join(basePath, "settings", "pier", pierConf)
|
|
|
- file, err := os.Open(confPath)
|
|
|
- defer file.Close()
|
|
|
- */
|
|
|
+ // 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
|
|
|
+ urbitMutex.Lock()
|
|
|
+ defer urbitMutex.Unlock()
|
|
|
+ urbitsConfig[pier] = targetStruct
|
|
|
return nil
|
|
|
}
|