fix: healthcheck не должен зависеть от полноты конфига
HEALTHCHECK в образе запускается отдельным процессом без -config и без секретов, поэтому валидация конфига делала контейнер unhealthy при полностью рабочем демоне. Проверка /healthz перенесена до разбора ошибки Load, который и при ошибке возвращает конфиг со значениями по умолчанию. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2 files changed
+19
-4
No files matched your search
@@ -39,10 +39,9 @@ func run() int {
|
||||
}
|
||||
|
||||
cfg, err := config.Load(*configPath, os.Getenv, config.OSReadFile)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "ошибка конфигурации:", err)
|
||||
return 2
|
||||
}
|
||||
// Проверка здоровья намеренно идёт ДО разбора ошибки конфигурации: HEALTHCHECK в образе
|
||||
// запускается как отдельный процесс, без -config и без секретов, и ему нужен только адрес
|
||||
// /healthz. Load возвращает конфиг с значениями по умолчанию даже при ошибке.
|
||||
if *healthcheck {
|
||||
if err := health.Probe(cfg.Listen, 3*time.Second); err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
@@ -50,6 +49,10 @@ func run() int {
|
||||
}
|
||||
return 0
|
||||
}
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "ошибка конфигурации:", err)
|
||||
return 2
|
||||
}
|
||||
|
||||
log := newLogger(cfg)
|
||||
log.Info("запуск", "version", version, "zones", cfg.Zones, "ip", cfg.IP, "ttl", cfg.TTL,
|
||||
|
||||
@@ -138,3 +138,15 @@ func TestSecretMissingFile(t *testing.T) {
|
||||
t.Fatal("ожидалась ошибка")
|
||||
}
|
||||
}
|
||||
|
||||
// Load обязан возвращать пригодный Listen даже при ошибке: на этом построена проверка
|
||||
// здоровья в контейнере — HEALTHCHECK запускается без -config и без секретов.
|
||||
func TestLoadReturnsDefaultListenOnError(t *testing.T) {
|
||||
cfg, err := Load("", func(string) string { return "" }, OSReadFile)
|
||||
if err == nil {
|
||||
t.Fatal("ожидали ошибку: не заданы ни конфиг, ни креды")
|
||||
}
|
||||
if cfg.Listen != ":9090" {
|
||||
t.Fatalf("Listen = %q, ожидали значение по умолчанию :9090", cfg.Listen)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user