main.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package main
  2. import (
  3. "context"
  4. "os"
  5. "os/signal"
  6. "syscall"
  7. "quickip/internal/config"
  8. "quickip/internal/deviceinfo"
  9. "quickip/internal/discovery"
  10. "quickip/internal/httpserver"
  11. "quickip/internal/logger"
  12. applyexecsvc "quickip/internal/network/applyexec"
  13. configreadersvc "quickip/internal/network/configreader"
  14. interfacesvc "quickip/internal/network/interfaces"
  15. netplansvc "quickip/internal/network/netplan"
  16. "quickip/internal/systemaction"
  17. validatorsvc "quickip/internal/network/validator"
  18. verifysvc "quickip/internal/network/verify"
  19. "quickip/internal/tasks"
  20. )
  21. func main() {
  22. ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
  23. defer stop()
  24. log := logger.New()
  25. cfg := config.Load(os.Args[1:])
  26. if os.Geteuid() != 0 {
  27. log.Warn("agent is not running as root; netplan write/apply and system actions will fail")
  28. }
  29. deviceSvc := deviceinfo.New(cfg)
  30. interfaceSvc := interfacesvc.New(cfg)
  31. configSvc := configreadersvc.New()
  32. validatorSvc := validatorsvc.New()
  33. netplanSvc := netplansvc.New()
  34. applySvc := applyexecsvc.New()
  35. verifySvc := verifysvc.New()
  36. taskSvc := tasks.New()
  37. systemSvc := systemaction.New()
  38. if err := interfaceSvc.EnsureMaintenanceAddress(); err != nil {
  39. log.Error("failed to ensure maintenance address", "error", err.Error())
  40. return
  41. }
  42. httpSrv := httpserver.New(cfg, log, deviceSvc, interfaceSvc, configSvc, validatorSvc, netplanSvc, applySvc, verifySvc, taskSvc, systemSvc)
  43. udpSrv := discovery.New(cfg, log, deviceSvc)
  44. errCh := make(chan error, 2)
  45. go func() { errCh <- httpSrv.Run(ctx) }()
  46. go func() { errCh <- udpSrv.Run(ctx) }()
  47. select {
  48. case <-ctx.Done():
  49. log.Info("agent shutting down")
  50. case err := <-errCh:
  51. if err != nil {
  52. log.Error("agent stopped with error", "error", err.Error())
  53. }
  54. }
  55. }