Konfiguration bearbeiten
Geheime Werte werden erst beim Fokus vom Server geladen und beim Verlassen wieder verdeckt.
diff --git a/.dockerignore b/.dockerignore index b2827e3..06a0d40 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,4 +3,3 @@ backups controller.password controller.json -env-controller diff --git a/.gitignore b/.gitignore index 7714446..885cb3b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ controller.password controller.json backups/ -env-controller *.log diff --git a/cmd/env-controller/main.go b/cmd/env-controller/main.go new file mode 100644 index 0000000..f233d35 --- /dev/null +++ b/cmd/env-controller/main.go @@ -0,0 +1,55 @@ +package main + +import ( + "context" + _ "embed" + "flag" + "log/slog" + "net/http" + "os" + "os/signal" + "syscall" + "time" + + "github.com/example/glpi-env-controller/internal/app" +) + +//go:embed page.html +var pageHTML string + +func main() { + configPath := flag.String("config", "", "path to controller configuration") + flag.Parse() + logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelInfo})) + resolvedConfigPath, err := app.ResolveConfigPath(*configPath, os.Getenv("ENV_CONTROLLER_CONFIG")) + if err != nil { + logger.Error("resolve configuration", "error", err) + os.Exit(1) + } + logger.Info("using configuration", "path", resolvedConfigPath) + cfg, password, err := app.LoadConfig(resolvedConfigPath) + if err != nil { + logger.Error("load configuration", "error", err) + os.Exit(1) + } + server, err := app.NewServer(cfg, password, pageHTML, logger) + if err != nil { + logger.Error("initialize server", "error", err) + os.Exit(1) + } + ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) + defer cancel() + server.AutoImport(ctx) + httpServer := &http.Server{Addr: cfg.ListenAddr, Handler: server.Handler(), ReadHeaderTimeout: 10 * time.Second, ReadTimeout: 30 * time.Second, WriteTimeout: 5 * time.Minute, IdleTimeout: 60 * time.Second, MaxHeaderBytes: 1 << 20} + go func() { + <-ctx.Done() + shutdownCtx, c := context.WithTimeout(context.Background(), 10*time.Second) + defer c() + _ = httpServer.Shutdown(shutdownCtx) + }() + logger.Info("env controller listening", "addr", cfg.ListenAddr) + if err := httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed { + logger.Error("server stopped", "error", err) + os.Exit(1) + } +} diff --git a/cmd/env-controller/page.html b/cmd/env-controller/page.html new file mode 100644 index 0000000..abffb4b --- /dev/null +++ b/cmd/env-controller/page.html @@ -0,0 +1,96 @@ +{{define "page"}} + + +
+ + + +Versionierte Konfiguration und kontrollierte Container-Aktionen