urbit.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. logger.Info(fmt.Sprintf("Loading pier container %v",pier))
  26. err := StartContainer(pier, "urbit")
  27. if err != nil {
  28. logger.Error(fmt.Sprintf("%v", err))
  29. continue
  30. }
  31. }
  32. }
  33. // apply latest version info (if automated updates)
  34. // start containers
  35. return nil
  36. }
  37. func Conf(pier string) structs.UrbitDocker {
  38. urbitMutex.Lock()
  39. defer urbitMutex.Unlock()
  40. return urbitsConfig[pier]
  41. }
  42. func LoadConfig(pier string) error {
  43. urbitMutex.Lock()
  44. defer urbitMutex.Unlock()
  45. // pull docker info from json
  46. confPath := filepath.Join(config.BasePath, "settings", "pier", pier+".json")
  47. file, err := ioutil.ReadFile(confPath)
  48. if err != nil {
  49. errmsg := fmt.Sprintf("Unable to load %s config: %v", pier, err)
  50. return fmt.Errorf(errmsg) // Return an error instead of a string
  51. }
  52. // Unmarshal JSON
  53. var targetStruct structs.UrbitDocker
  54. if err := json.Unmarshal(file, &targetStruct); err != nil {
  55. errmsg := fmt.Sprintf("Error decoding %s JSON: %v", pier, err)
  56. return fmt.Errorf(errmsg)
  57. }
  58. // Store in var
  59. urbitsConfig[pier] = targetStruct
  60. return nil
  61. }