urbit.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. // Loop through pier list
  18. conf := config.Conf()
  19. for _, pier := range conf.Piers {
  20. logger.Info(fmt.Sprintf("Loading pier %s", pier))
  21. info, err := StartContainer(pier, "vere")
  22. if err != nil {
  23. logger.Error(fmt.Sprintf("Error starting %s: %v", pier, err))
  24. continue
  25. }
  26. config.UpdateContainerState(pier, info)
  27. }
  28. return nil
  29. }
  30. func Conf(pier string) structs.UrbitDocker {
  31. urbitMutex.Lock()
  32. defer urbitMutex.Unlock()
  33. return UrbitsConfig[pier]
  34. }
  35. func LoadConfig(pier string) error {
  36. urbitMutex.Lock()
  37. defer urbitMutex.Unlock()
  38. // pull docker info from json
  39. confPath := filepath.Join(config.BasePath, "settings", "pier", pier+".json")
  40. file, err := ioutil.ReadFile(confPath)
  41. if err != nil {
  42. errmsg := fmt.Sprintf("Unable to load %s config: %v", pier, err)
  43. return fmt.Errorf(errmsg) // Return an error instead of a string
  44. }
  45. // Unmarshal JSON
  46. var targetStruct structs.UrbitDocker
  47. if err := json.Unmarshal(file, &targetStruct); err != nil {
  48. errmsg := fmt.Sprintf("Error decoding %s JSON: %v", pier, err)
  49. return fmt.Errorf(errmsg)
  50. }
  51. // Store in var
  52. UrbitsConfig[pier] = targetStruct
  53. return nil
  54. }