From 50cc1e64d0de0b629cef4e9d310d9791b2f5bf8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Thu, 17 Mar 2022 11:18:26 +0100 Subject: [PATCH] Manager: add `-write-config` CLI option to create config file and quit --- cmd/flamenco-manager/main.go | 14 +++++++++++++- internal/manager/config/service.go | 14 ++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/cmd/flamenco-manager/main.go b/cmd/flamenco-manager/main.go index f3768000..723eee48 100644 --- a/cmd/flamenco-manager/main.go +++ b/cmd/flamenco-manager/main.go @@ -37,7 +37,8 @@ import ( ) var cliArgs struct { - version bool + version bool + writeConfig bool } func main() { @@ -66,6 +67,15 @@ func main() { log.Error().Err(err).Msg("loading configuration") } + if cliArgs.writeConfig { + err := configService.Save() + if err != nil { + log.Error().Err(err).Msg("could not write configuration file") + os.Exit(1) + } + return + } + // TODO: enable TLS via Let's Encrypt. listen := configService.Get().Listen _, port, _ := net.SplitHostPort(listen) @@ -235,6 +245,8 @@ func parseCliArgs() { flag.BoolVar(&quiet, "quiet", false, "Only log warning-level and worse.") flag.BoolVar(&debug, "debug", false, "Enable debug-level logging.") flag.BoolVar(&trace, "trace", false, "Enable trace-level logging.") + flag.BoolVar(&cliArgs.writeConfig, "write-config", false, "Writes configuration to flamenco-manager.yaml, then exits.") + flag.Parse() var logLevel zerolog.Level diff --git a/internal/manager/config/service.go b/internal/manager/config/service.go index 0237ab36..7877a4b1 100644 --- a/internal/manager/config/service.go +++ b/internal/manager/config/service.go @@ -1,5 +1,7 @@ package config +import "github.com/rs/zerolog/log" + // SPDX-License-Identifier: GPL-3.0-or-later // Service provides access to Flamenco Manager configuration. @@ -29,3 +31,15 @@ func (s *Service) ExpandVariables(valueToExpand string, audience VariableAudienc func (s *Service) Get() *Conf { return &s.config } + +// Save writes the in-memory configuration to the config file. +func (s *Service) Save() error { + err := s.config.Write(configFilename) + if err != nil { + return err + } + + // Do the logging here, as our caller doesn't know `configFilename``. + log.Info().Str("filename", configFilename).Msg("configuration file written") + return nil +}