diff --git a/cmd/server/main.go b/cmd/server/main.go index bc20743..27c1288 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -42,7 +42,7 @@ func run() error { logger := logging.New(cfg.LogLevel) logger.Info("starting", "version", version, "commit", commit, "port", cfg.Port, - "stacks_root", cfg.StacksRoot, "opt_in_label", cfg.OptInLabel, + "mode", cfg.Mode, "stacks_root", cfg.StacksRoot, "opt_in_label", cfg.OptInLabel, ) dockerCli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) @@ -51,8 +51,21 @@ func run() error { } defer dockerCli.Close() - disc := discovery.New(dockerCli, cfg.StacksRoot, cfg.OptInLabel) - exec := updater.NewComposeExecutor() + var finder api.Finder + var exec updater.Executor + switch cfg.Mode { + case "swarm": + finder = discovery.NewSwarm(dockerCli, cfg.OptInLabel) + exec = updater.NewSwarmExecutor(dockerCli) + case "compose": + finder = discovery.New(dockerCli, cfg.StacksRoot, cfg.OptInLabel) + exec = updater.NewComposeExecutor() + default: + // Unreachable: config.Load already validates Mode, but guard + // here too rather than silently falling through to a nil + // finder/exec pair. + return fmt.Errorf("unknown MODE %q", cfg.Mode) + } reg := prometheus.NewRegistry() m := metrics.New(reg) @@ -62,7 +75,7 @@ func run() error { queue.Start(context.Background()) defer queue.Stop() - handlers := api.NewHandlers(disc, &submitterAdapter{queue: queue, timeout: cfg.UpdateTimeout}, dockerCli, version, commit, buildTime, m) + handlers := api.NewHandlers(finder, &submitterAdapter{queue: queue, timeout: cfg.UpdateTimeout}, dockerCli, version, commit, buildTime, m) mux := http.NewServeMux() mux.HandleFunc("POST /update", handlers.Update)