main.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. validatorsvc "quickip/internal/network/validator"
  17. verifysvc "quickip/internal/network/verify"
  18. "quickip/internal/tasks"
  19. )
  20. func main() {
  21. ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
  22. defer stop()
  23. log := logger.New()
  24. cfg := config.Load(os.Args[1:])
  25. deviceSvc := deviceinfo.New(cfg)
  26. interfaceSvc := interfacesvc.New(cfg)
  27. configSvc := configreadersvc.New()
  28. validatorSvc := validatorsvc.New()
  29. netplanSvc := netplansvc.New()
  30. applySvc := applyexecsvc.New()
  31. verifySvc := verifysvc.New()
  32. taskSvc := tasks.New()
  33. if err := interfaceSvc.EnsureMaintenanceAddress(); err != nil {
  34. log.Error("failed to ensure maintenance address", "error", err.Error())
  35. return
  36. }
  37. httpSrv := httpserver.New(cfg, log, deviceSvc, interfaceSvc, configSvc, validatorSvc, netplanSvc, applySvc, verifySvc, taskSvc)
  38. udpSrv := discovery.New(cfg, log, deviceSvc)
  39. errCh := make(chan error, 2)
  40. go func() { errCh <- httpSrv.Run(ctx) }()
  41. go func() { errCh <- udpSrv.Run(ctx) }()
  42. select {
  43. case <-ctx.Done():
  44. log.Info("agent shutting down")
  45. case err := <-errCh:
  46. if err != nil {
  47. log.Error("agent stopped with error", "error", err.Error())
  48. }
  49. }
  50. }