urbit.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package docker
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "goseg/config"
  6. "goseg/structs"
  7. "io/ioutil"
  8. "path/filepath"
  9. "sync"
  10. )
  11. var (
  12. urbitsConfig = make(map[string]structs.UrbitDocker)
  13. urbitMutex sync.RWMutex
  14. )
  15. func LoadUrbits() error {
  16. logger.Info("Loading Urbit ships")
  17. // Config struct
  18. conf := config.Conf()
  19. // Loop through pier list
  20. for _, pier := range conf.Piers {
  21. // load config
  22. if err := LoadConfig(pier); err != nil {
  23. logger.Error(fmt.Sprintf("%v", err))
  24. continue
  25. err := StartContainer(pier, "urbit")
  26. if err != nil {
  27. logger.Error(fmt.Sprintf("%v", err))
  28. continue
  29. }
  30. }
  31. }
  32. // apply latest version info (if automated updates)
  33. // start containers
  34. return nil
  35. }
  36. func Conf(pier string) structs.UrbitDocker {
  37. urbitMutex.Lock()
  38. defer urbitMutex.Unlock()
  39. return urbitsConfig[pier]
  40. }
  41. func LoadConfig(pier string) error {
  42. urbitMutex.Lock()
  43. defer urbitMutex.Unlock()
  44. // pull docker info from json
  45. confPath := filepath.Join(config.BasePath, "settings", "pier", pier+".json")
  46. file, err := ioutil.ReadFile(confPath)
  47. if err != nil {
  48. errmsg := fmt.Sprintf("Unable to load %s config: %v", pier, err)
  49. return fmt.Errorf(errmsg) // Return an error instead of a string
  50. }
  51. // Unmarshal JSON
  52. var targetStruct structs.UrbitDocker
  53. if err := json.Unmarshal(file, &targetStruct); err != nil {
  54. errmsg := fmt.Sprintf("Error decoding %s JSON: %v", pier, err)
  55. return fmt.Errorf(errmsg)
  56. }
  57. // Store in var
  58. urbitsConfig[pier] = targetStruct
  59. return nil
  60. }