feat(config): add MODE env var to select compose or swarm operation
This commit is contained in:
@@ -16,6 +16,7 @@ type Config struct {
|
|||||||
LogLevel string
|
LogLevel string
|
||||||
UpdateTimeout time.Duration
|
UpdateTimeout time.Duration
|
||||||
OptInLabel string
|
OptInLabel string
|
||||||
|
Mode string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load reads configuration from environment variables, applies defaults,
|
// Load reads configuration from environment variables, applies defaults,
|
||||||
@@ -28,12 +29,17 @@ func Load() (*Config, error) {
|
|||||||
Port: getenvDefault("PORT", "8080"),
|
Port: getenvDefault("PORT", "8080"),
|
||||||
LogLevel: getenvDefault("LOG_LEVEL", "info"),
|
LogLevel: getenvDefault("LOG_LEVEL", "info"),
|
||||||
OptInLabel: getenvDefault("OPT_IN_LABEL", "se.shcizo.auto-update"),
|
OptInLabel: getenvDefault("OPT_IN_LABEL", "se.shcizo.auto-update"),
|
||||||
|
Mode: getenvDefault("MODE", "compose"),
|
||||||
}
|
}
|
||||||
|
|
||||||
if cfg.APIKey == "" {
|
if cfg.APIKey == "" {
|
||||||
return nil, errors.New("UPDATER_API_KEY is required")
|
return nil, errors.New("UPDATER_API_KEY is required")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if cfg.Mode != "compose" && cfg.Mode != "swarm" {
|
||||||
|
return nil, fmt.Errorf("MODE %q is invalid: must be %q or %q", cfg.Mode, "compose", "swarm")
|
||||||
|
}
|
||||||
|
|
||||||
timeoutStr := getenvDefault("UPDATE_TIMEOUT", "5m")
|
timeoutStr := getenvDefault("UPDATE_TIMEOUT", "5m")
|
||||||
d, err := time.ParseDuration(timeoutStr)
|
d, err := time.ParseDuration(timeoutStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -57,3 +57,26 @@ func TestLoad_InvalidTimeoutErrors(t *testing.T) {
|
|||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
require.Contains(t, err.Error(), "UPDATE_TIMEOUT")
|
require.Contains(t, err.Error(), "UPDATE_TIMEOUT")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestLoad_DefaultsToComposeMode(t *testing.T) {
|
||||||
|
t.Setenv("UPDATER_API_KEY", "secret")
|
||||||
|
cfg, err := config.Load()
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, "compose", cfg.Mode)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestLoad_AcceptsSwarmMode(t *testing.T) {
|
||||||
|
t.Setenv("UPDATER_API_KEY", "secret")
|
||||||
|
t.Setenv("MODE", "swarm")
|
||||||
|
cfg, err := config.Load()
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, "swarm", cfg.Mode)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestLoad_RejectsInvalidMode(t *testing.T) {
|
||||||
|
t.Setenv("UPDATER_API_KEY", "secret")
|
||||||
|
t.Setenv("MODE", "kubernetes")
|
||||||
|
_, err := config.Load()
|
||||||
|
require.Error(t, err)
|
||||||
|
require.Contains(t, err.Error(), "MODE")
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user