Restore: перевод бэкапов на восстановленный сервер
Раньше восстановленная копия получала конфиг и таймер агента со старым токеном (через категории etc и units), и бэкапы шли с двух серверов одновременно. - конфиг и юниты агента больше не бэкапятся - в конце restore спрашивает, сделать ли сервер основным: сервер бэкапов выпускает новый токен (POST /api/v1/restore/takeover), restore ставит агента; токен старого сервера отозван — его агент получает отказ - --takeover / --no-takeover; без них — вопрос (с --yes — да) - уведомление «Сервер восстановлен» в ntfy/Telegram Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
488abc2d34
commit
97c7051021
12 files changed
+195
-4
No files matched your search
@@ -40,6 +40,7 @@ type Options struct {
|
||||
Yes bool // не спрашивать подтверждение
|
||||
StagingDir string
|
||||
KeepStaging bool
|
||||
Takeover string // TakeoverAsk / TakeoverYes / TakeoverNo
|
||||
}
|
||||
|
||||
type restorer struct {
|
||||
@@ -156,6 +157,7 @@ func Run(ctx context.Context, opts Options) error {
|
||||
failed = append(failed, c.Name)
|
||||
}
|
||||
}
|
||||
r.takeover()
|
||||
r.finish(failed)
|
||||
if len(failed) > 0 {
|
||||
return fmt.Errorf("с ошибками восстановлены категории: %s", strings.Join(failed, ", "))
|
||||
@@ -193,6 +195,17 @@ func (r *restorer) summary(rm *api.RestoreManifest) {
|
||||
info("части: %s", strings.Join(parts, ", "))
|
||||
}
|
||||
|
||||
// confirmDefaultYes — вопрос, где пустой ответ означает «да».
|
||||
func confirmDefaultYes(q string) bool {
|
||||
fmt.Printf("\n%s? [Y/n]: ", q)
|
||||
line, _ := bufio.NewReader(os.Stdin).ReadString('\n')
|
||||
switch strings.ToLower(strings.TrimSpace(line)) {
|
||||
case "", "y", "yes", "д", "да":
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func confirm(q string) bool {
|
||||
fmt.Printf("\n%s? [y/N]: ", q)
|
||||
line, _ := bufio.NewReader(os.Stdin).ReadString('\n')
|
||||
|
||||
Reference in new issue
Block a user