feat: add Docker Swarm support (MODE=swarm) #4

Merged
shcizo merged 10 commits from worktree-docker-swarm-support into main 2026-07-04 18:54:18 +00:00
Showing only changes of commit 9a3a200873 - Show all commits
+17 -4
View File
@@ -42,7 +42,7 @@ func run() error {
logger := logging.New(cfg.LogLevel) logger := logging.New(cfg.LogLevel)
logger.Info("starting", logger.Info("starting",
"version", version, "commit", commit, "port", cfg.Port, "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()) dockerCli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
@@ -51,8 +51,21 @@ func run() error {
} }
defer dockerCli.Close() defer dockerCli.Close()
disc := discovery.New(dockerCli, cfg.StacksRoot, cfg.OptInLabel) var finder api.Finder
exec := updater.NewComposeExecutor() 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() reg := prometheus.NewRegistry()
m := metrics.New(reg) m := metrics.New(reg)
@@ -62,7 +75,7 @@ func run() error {
queue.Start(context.Background()) queue.Start(context.Background())
defer queue.Stop() 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 := http.NewServeMux()
mux.HandleFunc("POST /update", handlers.Update) mux.HandleFunc("POST /update", handlers.Update)