package main import ( "context" "fmt" "os" "strings" "time" "git.netcell-it.de/projekte/edgeguard-native/internal/configgen" "git.netcell-it.de/projekte/edgeguard-native/internal/database" "git.netcell-it.de/projekte/edgeguard-native/internal/firewall" "git.netcell-it.de/projekte/edgeguard-native/internal/haproxy" "git.netcell-it.de/projekte/edgeguard-native/internal/services/configorch" "git.netcell-it.de/projekte/edgeguard-native/internal/services/secrets" "git.netcell-it.de/projekte/edgeguard-native/internal/squid" "git.netcell-it.de/projekte/edgeguard-native/internal/unbound" "git.netcell-it.de/projekte/edgeguard-native/internal/wireguard" ) // cmdRenderConfig regenerates every per-service config file from PG // state. Used after package install (postinst), after admin // mutations (UI button), or as a manual recovery action. // // Flags: // // --no-reload Write configs but skip systemctl reload. // --only=svc1,svc2 Run only the named generators. func cmdRenderConfig(args []string) int { skipReload := false var only []string for i := 0; i < len(args); i++ { switch { case args[i] == "--no-reload": skipReload = true case strings.HasPrefix(args[i], "--only="): val := strings.TrimPrefix(args[i], "--only=") only = strings.Split(val, ",") case args[i] == "-h" || args[i] == "--help": fmt.Println("Usage: edgeguard-ctl render-config [--no-reload] [--only=svc1,svc2]") return 0 } } ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) defer cancel() pool, err := database.Open(ctx, database.ConnStringFromEnv()) if err != nil { fmt.Fprintln(os.Stderr, "render-config: open db:", err) return 1 } defer pool.Close() hap := haproxy.New(pool) fw := firewall.New(pool) sq := squid.New() wg := wireguard.New(pool, secrets.New("")) ub := unbound.New() if skipReload { hap.SkipReload = true fw.SkipReload = true } gens := []configgen.Generator{hap, fw, sq, wg, ub} results, runErr := configorch.Run(ctx, gens, only) fmt.Print(configorch.Summarise(results)) if runErr != nil { fmt.Fprintln(os.Stderr, "render-config aborted:", runErr) return 1 } return 0 }