feat: add proxmox reconciliation job

This commit is contained in:
Philipp
2026-06-11 14:48:50 +02:00
parent d08e41b013
commit 137c13fa98
10 changed files with 487 additions and 2 deletions
+24
View File
@@ -50,9 +50,14 @@ func main() {
server := asynq.NewServer(redis, asynq.Config{
Concurrency: cfg.WorkerConcurrency,
})
scheduler := asynq.NewScheduler(redis, &asynq.SchedulerOpts{})
mux := asynq.NewServeMux()
clusterRepository := cluster.NewRepository(db, tokenCipher)
registerHandlers(mux, db, clusterRepository, logger)
if _, err := scheduler.Register("@every 5m", tasks.NewProxmoxReconcileAllTask()); err != nil {
logger.Error("failed to register reconciliation schedule", "error", err)
os.Exit(1)
}
go func() {
logger.Info("worker started", "concurrency", cfg.WorkerConcurrency, "redis_addr", cfg.RedisAddr)
@@ -61,8 +66,16 @@ func main() {
stop()
}
}()
go func() {
logger.Info("worker scheduler started", "reconcile_interval", "5m")
if err := scheduler.Run(); err != nil {
logger.Error("worker scheduler failed", "error", err)
stop()
}
}()
<-ctx.Done()
scheduler.Shutdown()
server.Shutdown()
logger.Info("worker stopped")
}
@@ -78,6 +91,17 @@ func registerHandlers(mux *asynq.ServeMux, db *sql.DB, clusters cluster.Reposito
logger,
),
)
reconcileStore := tasks.NewSQLReconcileStore(db)
mux.Handle(
tasks.TypeProxmoxReconcileAll,
tasks.NewProxmoxReconcileHandler(
reconcileStore,
reconcileStore,
tasks.NewDefaultClusterReconcileClientResolver(clusters),
tasks.NewSQLAuditWriter(db),
logger,
),
)
}
func openDatabase(databaseURL string) (*sql.DB, error) {