fix: FSM calls do_transfer_offer() correctly; resume remembers target_host/user/port

This commit is contained in:
2026-05-22 23:01:52 +04:00
parent 76b06b157a
commit a4be7c59d9
2 changed files with 35 additions and 17 deletions

View File

@@ -81,8 +81,8 @@ class FSM:
from source.source import do_stop_service
do_stop_service()
elif name == "TRANSFER":
from transfer.transfer import do_transfer
do_transfer()
from source.source import do_transfer_offer
do_transfer_offer()
elif name == "DONE":
success("Source-режим завершён")

View File

@@ -330,23 +330,41 @@ def do_stop_service():
def do_transfer_offer():
step(4, "ПЕРЕНОС НА НОВЫЙ СЕРВЕР (опционально)")
if not confirm("Перенести архив на новый сервер сейчас", default="y"):
success("Готово! Архив оставлен на текущем сервере.")
success(f"Manifest и архив лежат в: {_ARCHIVE_DIR}")
state.set_stage("DONE")
return
st = state.load_state()
# При resume: проверяем, были ли уже введены target-параметры
resume_host = st.get("target_host")
resume_user = st.get("target_user")
resume_port = st.get("target_port", 22)
if resume_host and resume_host not in ("", "None"):
info(f"Обнаружены ранее введённые параметры target: {resume_user}@{resume_host}:{resume_port}")
if confirm("Использовать эти параметры повторно (если ошибка была в SSH-ключе, выберите Y, после фикса)", default="y"):
host, user, port_int = resume_host, resume_user or "root", int(resume_port)
else:
# Сбрасываем, чтобы запросить заново
state.set_stage("SOURCE_STOP", target_host=None, target_user=None, target_port=None)
host = user = None
else:
host = user = None
host = prompt("IP или домен нового сервера")
if not host:
warn("IP/домен не указан. Перенос пропущен.")
success(f"Архив оставлен в: {_ARCHIVE_DIR}")
state.set_stage("DONE")
return
user = prompt("SSH user (root или обычный пользователь)")
if not user:
user = "root"
port = prompt("SSH порт (Enter=22)") or "22"
port_int = int(port)
if not confirm("Перенести архив на новый сервер сейчас", default="y"):
success("Готово! Архив оставлен на текущем сервере.")
success(f"Manifest и архив лежат в: {_ARCHIVE_DIR}")
state.set_stage("DONE")
return
host = prompt("IP или домен нового сервера")
if not host:
warn("IP/домен не указан. Перенос пропущен.")
success(f"Архив оставлен в: {_ARCHIVE_DIR}")
state.set_stage("DONE")
return
user = prompt("SSH user (root или обычный пользователь)")
if not user:
user = "root"
port = prompt("SSH порт (Enter=22)") or "22"
port_int = int(port)
# SSH-диагностика: ищем ключи, проверяем доступ
from transfer.ssh import pick_or_setup_ssh_key